SQL Server 数据的索引引发的血案

char,nchar,varchar,nvarchar。

char,固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 ISO 同义词为 character

varchar,可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。varchar 的 ISO 同义词为 char varyingcharacter varying

nchar,n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。nchar 的 ISO 同义词为 national charnational character

nvarchar,可变长度 Unicode 字符数据。n值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。nvarchar 的 ISO 同义词为 national char varyingnational character varying

 

业务系统中有个大表,用于日常订单记录。

因为业务部门开发过程中,初期未介入。字段也不算特别多,大概24个字段。

因为其中有一列非中文数据,使用了char类型。在数据增多后,系统操作越来越慢,随时把cpu满载,在线上分析了很久,也没分析到原因。

把数据库结构拖到线下来测试,都很顺畅。

后来一个偶然的原因,发现该char字段,但是开发的传参是varchar,导致索引失效。

 

posted on 2020-09-04 14:59  成都兰斯  阅读(187)  评论(0编辑  收藏  举报