我有以下查询。
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_)示例时,索引也会因某种原因而被删除。这是为什么?
答案 0 :(得分:1)
怎么样::
在table1上为id1创建一个索引,为id2创建table2,查询应为::
SELECT MIN(col1) FROM table1
inner join table2 on id1=id2