mysql in 会使用索引吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql in 会使用索引吗?相关的知识,希望对你有一定的参考价值。
参考技术A 通常情况:\\x0d\\x0a 在有索引的情况且查询条件使用到索引列的话,会使用索引\\x0d\\x0a 具体可以使用\\x0d\\x0a explain($sql statement) 来分析\\x0d\\x0a特殊情况\\x0d\\x0a\\x0d\\x0a 如select 语句使用了ignore index的话,则不会使用mysql in条件查询到底会不会用到索引
MySQL 的 in 查询在 5.5 以上的版本中存储引擎都是 innodb 的,正常情况下会走索引的!至于 MyISAM 没试过!
如果是 5.5 之前的版本确实不会走索引的,在 5.5 之后的版本,MySQL 做了优化。MySQL 在 2010 年发布 5.5 版本中,优化器对 in 操作符可以自动完成优化,针对建立了索引的列可以使用索引,没有索引的列还是会走全表扫描。
5.5 之前的版本select * from a where id in (select id from b); 这条 sql 语句它的执行计划其实并不是先查询出 b 表的所有 id,然后再与 a 表的 id 进行比较。mysql 会把 in 子查询转换成 exists 相关子查询,所以它实际等同于这条 sql 语句:select * from a where exists(select *
from b where b.id=a.id),而 exists 相关子查询的执行原理是:循环取出 a 表的每一条记录与 b 表进行比较,比较的条件是 a.id=b.id。看 a 表的每条记录的 id 是否在 b 表存在,如果存在就行返回 a 表的这条记录。
以上是关于mysql in 会使用索引吗?的主要内容,如果未能解决你的问题,请参考以下文章