索引不生效的场景

组合索引

 

旧的mysql版本可能因为索引的顺序问题不生效

 

 

单列索引

思路:一般索引不生效通常意味着数据库的引擎解析优化的查询需要全表检索

 

所以(这边校验的是mysql 5.7):

1、对where做了函数判断(order by 也一样)

substr(USERNAME, 2)='admin'

 

2、本来以为not in会触发,结果发现是范围查询,也有用到,只是可能性能有差异

 

3、exists和not exists倒是都有两个查询计划,第一个用的事全表,第二个具体看有没有索引,有的话也会用到

 

4、某些情况下,引擎自动优化的结果:小表查询

 

5、类型不匹配的情况下会触发类型转换,导致索引失效

 

6、多表查询,组合索引情况下,前一个索引适用了范围匹配

 

7、数据量太大导致优化器放弃使用索引

 

8、查询出的数据超过总数据的一定比例

 

9、order by跨表或用到函数和计算

 

posted @ 2020-08-19 11:06  gabin  阅读(188)  评论(0编辑  收藏  举报