索引 - 字符类型的索引 ¶
作者:KK
发表日期:2017.7.22
一般都不会轻易为字符串类型建索引 ¶
在常见应用中要建索引的一般是账号、邮箱、订单号这些
因为字符串的索引比较大,如果说数值型建索引后2000万条记录开始查询略显缓慢,那字符串索引可能会有700万条记录的时候就会查询略显缓慢(具体看表的情况和查询条件咯)
总之字符串索引的查询瓶颈会来得更快
LIKE比较前面带%号的时候不会使用索引 ¶
WHERE email LIKE '%qq.com'
这样前面带%
的LIKE比较查询时无法使用字符串索引
后面有百分号会使用索引,比如address LIKE '广东省%'
如果有name = '值'
或者name like '值'
都会使用到索引,其实此时like比较和等号比较的效果是一样的,
尽量减少key_len ¶
explain命令的分析结果中有个key_len嘛,它是越短对查询速度越有利
字符串类型的时候如果不包含中文,那该字段的排序规则尽量不要用utf8
和gbk
咯,个人建议使用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