MySQL在使用IN(SUBQUERY)时忽略了索引?

时间:2012-07-11 10:33:07

标签: mysql in-subquery

我有以下查询。

SELECT MIN(col1) FROM table1 WHERE id1 IN (SELECT id2 FROM table2)

这会产生大约需要5秒的输出。

但是,如果我将查询更改为以两个单独的查询运行,例如:

SELECT id2 FROM table2
SELECT MIN(col1) FROM table1 WHERE id1 IN (_results_from_first_query_)

然后这会产生大约0.05秒的输出。

EXPLAIN显示以下内容(为可怕的缩进道歉):

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   PRIMARY     table1 ALL  NULL    NULL    NULL    NULL    1107294     Using where
2   DEPENDENT SUBQUERY  table2 eq_ref   PRIMARY     PRIMARY     16  const,func  1   Using index

VS

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  table1  range   PRIMARY,id1     id1     8   NULL    12068   Using where

为什么我的查询使用不使用索引的子查询?

此外,如果我从table2中获取的ID集的大小超过650,那么在执行IN(_results_from_first_query_)示例时,索引也会因某种原因而被删除。这是为什么?

1 个答案:

答案 0 :(得分:1)

怎么样::

在table1上为id1创建一个索引,为id2创建table2,查询应为::

SELECT MIN(col1) FROM table1 

inner join table2 on id1=id2