mysql的负向条件查询,例如not in,会不会使用索引?
其实,mysql还是会尽量利用索引。如果查询的列上有索引,并且索引能够覆盖查询所需的列,那么mysql可能会使用索引来获取结果,而不是进行全表扫描。
例如,执行语句explain select * from test_table where type not in ('login', 'register');查看执行计划,其中使用了负向条件not in:

从上面输出可以看出,这个负向查询还是使用了索引的。
执行语句explain select * from test_table where type in ('login', 'register');查看执行计划,其中使用正向条件in:

从输出可以看出,这个正向条件查询也使用了索引。
文章讨论了MySQL中负向条件查询(如notin)是否利用索引的问题。即使使用notin,只要查询列有索引且能覆盖所需列,MySQL会优先使用索引。正向条件in同样如此,只要满足索引条件,查询都会利用索引避免全表扫描。

727

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



