- 在联合索引的场景下,查询条件不满足最左匹配原则。
- 在联合索引下,尽量使用明确的查询列来趋向于走覆盖索引。
- 索引列参与了运算,会导致全表扫描,索引失效。
- 索引列参与了函数处理,会导致全表扫描,索引失效。
- 模糊查询时(like语句),模糊匹配的占位符位于条件的首部。
- 参数类型与字段类型不匹配,导致类型发生了隐式转换,索引失效。
- 查询条件使用or关键字,其中一个字段没有创建索引,则会导致整个查询语句索引失效; or两边为“>”和“<”范围查询时,索引失效。
- 两列数据做比较,即便两列都创建了索引,索引也会失效。
- 查询条件使用不等进行比较时,需要慎重,普通索引会查询结果集占比较大时索引会失效。
- 查询条件使用is null时正常走索引,使用is not null时,不走索引。
- 查询条件使用not in时,如果是主键则走索引,如果是普通索引,则索引失效。
- 查询条件使用not exists时,索引失效。
- 当查询条件涉及到order by、limit等条件时,是否走索引情况比较复杂,而且与Mysql版本有关,通常普通索引,如果未使用limit,则不会走索引。order by多个索引字段时,可能不会走索引。其他情况,建议在使用时进行expain验证。
- 当查询条件为大于等于、in等范围查询时,根据查询结果占全表数据比例的不同,优化器有可能会放弃索引,进行全表扫描。
- Mysql优化器的其他优化策略,比如优化器认为在某些情况下,全表扫描比走索引快,则它就会放弃索引。
posted @
2022-06-06 11:46
Siu_Miner
阅读(
350)
评论()
收藏
举报