大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说MySQL前缀索引「建议收藏」,希望您对编程的造诣更进一步.
有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。
前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。
前缀索引的选择性
使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。
Tips:主键索引和唯一索引的索引值是不可能重复的,索引的选择性就很高,查询效率也最好。
选择足够长的前缀可以更好的保证高选择性,但又不能太长,需要一个合适的长度。怎么选?
-
在数据增长不是很快的表,可以通过以下方式来计算出合适的前缀索引的选择长度值:
SELECT COUNT(DISTINCT index_column)/COUNT(*) FROM table_name;
代码100分
Tips:index_column 代表要添加前缀索引的列
-
在数据增长很快的表中,上述方式计算就不准确了,原因在于数据增长很快的表 index_column 字段重复的记录和总记录数据变化都比较快,那么计算出来的前缀索引长度也是随着变化很快的。
创建前缀索引
代码100分ALTER TABLE table_name ADD INDEX index_name (index_column(length));
前缀索引的局限性
前缀索引能使索引更小、更快,但是 MySQL 无法使用前缀索引做 ORDER BY 和 GROUP BY , 也无法使用前缀索引做覆盖扫描。
后缀索引
MySQL 没有提供后缀索引,事实上,一些业务场景对后缀匹配选择性更高,比如我曾经参与过的项目,手机的入网标示imei号,前缀都是86等固定的国家编号开头,这个时候可以将字符反转后存储,就可以建立选择性较高的前缀索引。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8246.html