怎么给字符串字段加索引?
创建时间:2021年11月15日13:28:29
文章目录
——————————————————————————————
前缀索引
问:什么是前缀索引?作用是什么?
答:指定字符字段的前n个字符带索引,即为前缀索引。其占用空间小,但可能会增加额外的记录扫描次数,因此使用时需要根据业务情况综合设置前缀索引的长度。
alter table SUser add index index2(email(6));
问:使用前缀索引需要注意什么?
答:增加扫描次数;
只要使用了前缀索引,查询覆盖索引的列时,不论定义的长度是否真实地将所有字符都截断,mysql都会进行回表操作。
索引长度和索引搜索效率也有关系(同大小数据页能否容纳更多的索引),所以尽量选取索引长度短,并且区分度高的数据。
实战题
问:如果要存储一个市的身份证信息,前6位相同,此时怎么设计身份证索引最好。
答:
1、身份证倒序存储,再结合前缀索引使用。
2、新增一列作为hash校验值存储,由于可能存在冲突,所以查询时需要额外判断是否精确匹配自己想要的值;
两者缺点:无法支持范围查询
问:上面两个方案有什么区别?
答:
空间上,倒序仅在主键树上额外占用空间,hash方式则额外在普通索引树上占用空间,但hash的字节长可以比倒序短,最终两者没有太大差别;
CPU上,倒序在读写时需要额外调用一次倒序的函数,hash则是额外调用一次crc32函数,倒序函数开销更多一点点;
查询效率上:hash的区分度比较倒序更高,因此其综合扫描次数要更短。