在下列情况,虽然存在索引,但是mysql并不会使用相应的索引.
1.如果mysql估计使用索引比全表扫描更慢,则不使用索引.
2.如果使用memory/heap表并且where条件中不使用"="进行索引列,那么不会使用到索引.heap表只有在"="的条件下才会使用索引.
3.用or来分隔开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及到的索引都不会被用到.
4.如果使用到的条件不是复合索引的第一列,那么复合索引也不会被使用.
5.如果like是以%开始,那么也不会使用索引.
6.如果列的类型是字符串,但在where条件中把字符串常量值用引号引起来,否则也不会使用索引.
本文列举了MySQL在特定情况下不使用已创建索引的情况,包括全表扫描更快时、特定表类型仅支持等值查询、复合索引的非首列查询、使用模糊匹配等情况。
10万+

被折叠的 条评论
为什么被折叠?



