索引 - 字符类型的索引

  • 作者:KK

  • 发表日期:2017.7.22


一般都不会轻易为字符串类型建索引

在常见应用中要建索引的一般是账号、邮箱、订单号这些

因为字符串的索引比较大,如果说数值型建索引后2000万条记录开始查询略显缓慢,那字符串索引可能会有700万条记录的时候就会查询略显缓慢(具体看表的情况和查询条件咯)

总之字符串索引的查询瓶颈会来得更快


LIKE比较前面带%号的时候不会使用索引

WHERE email LIKE '%qq.com'这样前面带%的LIKE比较查询时无法使用字符串索引

后面有百分号会使用索引,比如address LIKE '广东省%'

如果有name = '值'或者name like '值'都会使用到索引,其实此时like比较和等号比较的效果是一样的,


尽量减少key_len

explain命令的分析结果中有个key_len嘛,它是越短对查询速度越有利

字符串类型的时候如果不包含中文,那该字段的排序规则尽量不要用utf8gbk咯,个人建议使用ascii_bin


字符串索引的key_len计算规则

1. utf8编码 + 可以为null

varchar(20) charset = utf8(1个文字3字节),key_len为63

计算公式:20 * 3 + 1(是否为null的标识) +2(字符长度)


2. utf8编码 + not null

varchar(20) not null charset = utf8,key_len为62

计算公式:20 * 3 + 2(字符长度)


3. gbk编码 + 可以为null

char(20) charset = gbk(1个文字2字节),key_len为41

计算公式:20 * 2 + 1(是否为null的标识)


4. gbk编码 + not null

char(20) not null charset = gbk,key_len为40

计算公式:20 * 2