前缀索引
前缀索引 · MySQL优化 · 看云 https://www.kancloud.cn/lizhenjie1992/my/554979
通过字段前n位创建的索引就称为“前缀索引”。如果一个字段内容的前边的n位信息已经足够标识当前的字段内容,就可以把字段的前n位获得出来并创建索引,该索引占据空间更小、运行速度更快.
例如:
- 关伟伟
- 关小宝
- 吕纪无
- 刘尚香
- 王云斐
以上4个记录信息创建索引,完全可以把第一个字给获得出来创建索引,第一个字完全可以唯一标识每个字段内容。
语法:
alter table 表名 add key (字段(前n位位数));
到底前几位可以唯一标识字段的内容?
获取制作前缀索引的n的信息:
- 去除字段重复内容并计算总数目.
- 取字段的前(n)1、2、3.....位不重复的信息并计算总数目,n从1开始不断累加,直到总数目 与 ①计算的总数目相等,此时n就是我们设计前缀索引的数字n信息.
mysql中截取字段的前n位信息,使用函数left(字段,长度).例如截取前5位信息: left(字段,5).
制作前缀索引
计算全部字段不重复记录的总条数:
select count(distinct 字段) from 表;
计算前n位不重复记录的总条数,n从1开始累加:
select count(distinct left(字段,n)) from 表;
比较两个统计的数据是否一致,如果一致就取N的值作为前缀索引. 前缀索引比普通索引速度要快很多.