mysql索引失效的场景_MySQL数据库下载

(1) 2024-06-28 21:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
mysql索引失效的场景_MySQL数据库下载,希望能够帮助你!!!。

案例所用的表结构、索引、与数据如下:

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第1张
mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第2张

索引失效与优化

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第3张

1、全值匹配我最爱

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第4张

2、最佳左前缀法则(带头索引不能死,中间索引不能断)

如果索引了多个列,要遵守最佳左前缀法则。指的是查询从索引的最左前列开始 并且 不跳过索引中的列。
正确的示例参考上图。

错误的示例:
带头索引死:
mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第5张
中间索引断(带头索引生效,其他索引失效):
mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第6张

3、不要在索引上做任何操作(计算、函数、自动/手动类型转换),不然会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第7张

4、mysql存储引擎不能继续使用索引中范围条件(bettween、<、>、in等)右边的列

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第8张

5、尽量使用覆盖索引(只查询索引的列(索引列和查询列一致)),减少select *

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第9张

6、索引字段上使用(!= 或者 < >)判断时,会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第10张

7、索引字段上使用 is null / is not null 判断时,会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第11张

8、索引字段使用like以通配符开头(‘%字符串’)时,会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第12张
由结果可知,like以通配符结束相当于范围查找,索引不会失效。与范围条件(bettween、<、>、in等)不同的是:不会导致右边的索引失效。

问题:解决like ‘%字符串%’时,索引失效问题的方法?
使用覆盖索引可以解决。
mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第13张
mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第14张

9、索引字段是字符串,但查询时不加单引号,会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第15张

10、索引字段使用 or 时,会导致索引失效而转向全表扫描

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第16张

小总结

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第17张

mysql索引失效的场景_MySQL数据库下载_https://bianchenghao6.com/blog__第18张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复