索引注意事项
创建索引的原则
1.建在 选择性 高的字段上(不重复的索引值/表记录数)
选择性高:创建索引的时候对应的字段尽量保证次字段的不重复性,若果字段出现大量的重复数据,加索引的意义将缺失。
选中性高的索引效果好,价值大,效率更快。
2.组合索引中,选中性高的字段排在最前面,即作为引导列。
3.查询条件中包含两个选择性高的字段时,可以考虑创建两个索引(尤其在这两个条件查询根据 OR 连接时)
4.不要重复创建彼此有包含关系的索引,如index(a,b,c) index(a,b) index (a)
5.组合索引的字段不要过多,如果超过四个字段,一般考虑拆分成多个单列索引或者更为简单的组合索引
6.不要滥用索引,及时删除无用的索引。
滥用索引的危害
1.降低写入性能
在数据写入表中的时候,MySQL除了要把数据写到硬盘上,还需要更新索引。如果表中有大量索引,每次写入数据会引发多次索引更新,这会降低写入性能。2.增加磁盘空间的使用
索引是存储在独立的数据结构中的,MySQL使用B+tree或哈希表来实现索引的存储。所以,加索引的同时,MySQL也要维护索引结构,从而占用更多的磁盘空间。3.增加CPU的负担
MySQL执行查询语句的时候会利用索引来加速查询的效率,但是同时也增加了CPU的负担。MySQL要根据索引中的指针来定位记录,这需要进行很多次CPU计算,同时也会增加CPU的缓存失效率。
索引失效原因
1.查询的索引字段上使用了函数
2.索引字段的LIKE查询以%开头
3.索引字段存在隐式类型转换(where参数与字段之间或join连接的两个字段不一致)
4.查询条件未使用组合索引的引导列
5.where中索引列有运算
6.数据量少