前缀索引
建立索引通常会使用字段的整体作为索引的关键字,而前缀索引就是使用字段的前部分数据作为建立索引的关键字
注意:必须是使用字段的前一部分,不是中间部分,也不是后面一部分。
语法:Index `index_name`(`index_field`(N));
使用 index_name 前 N 个字符建立的索引,然而这个 N 究竟是多少?(核心)
原理:使用 N 长度所达到的辨识度,要极限接近于使用全部长度的辨识度即可!
举例:一个班级20个人,姓王的同学3个别是 :王二狗,王老五,王建春。这个时候来了位老师说要找一位姓王的同学
这时姓王的同学有三个,辨识度并不能精确到某一个人,如果这位老师说:我需要找一位 王二 什么的同学,
我们就可以精确到老师要找的人时 王二狗 同学 。这个时候当 N = 2 时所达到的辨识度 就极限接近于全部查长度
辨识度了。
如何计算出 N 的长度:
这里以登陆为例,用户在登陆时的密码给它建立前缀索引
1.将 emp 表 epassword 字段进行 32 位密码加密
2.计算出全字段索引的辨识度位多少(<=1)
3.分别计算出前 6 到 前9位字段索引的辨识度为多少?
这是可以发现当取字段前9个字符做前缀索引时,其辨识度已经极限接近全字段做前缀索引的辨识度了。
所以就可以取:
优点:前缀索引是一种能使索引更小,更快的有效办法
缺点:mysql无法使用其前缀索引做ORDER BY和GROUP BY,也无法使用前缀索引做覆盖扫描