总结一下常见的几种索引失效场景:
1. 使用 or 的时候 某些字段没有加索引, 导致加索引的字段也没能走索引
2. 索引字段加了函数
3. 对索引条件进行了运算
4. 类型转换
5. where is null 和 is not null
6. like 不是 走 '%' 右匹配
7. 联合索引 要按顺序使用 (a, b, c) -> a | a,b | a,b,c , 不然会导致个别索引失效
--------------------------------------------------------------------------------------------------------------------------------------------------------
经典慢sql 案例分析:
Impossible WHERE noticed after reading const tables
解释原因如下:
根据主键查询或者唯一性索引查询,如果这条数据没有的话,它会全表扫描,然后得出一个结论,该数据不在表中。
对于高并发的库来说,这条数据,会让负载特别的高。
https://developer.aliyun.com/article/393774
强制使用索引: fore index
select * from t_test fore index(key_index) where `key` in (1,2) ;
强制不使用索引 : ignore index
select * from t_test ignore index(key_index) where `key` in (1,2) ;