我,而从2个表执行选择发现了一些奇怪:MySQL查询选择使用子选择的时间太长
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
这个查询近似242秒了。
但是,当我执行的子查询
SELECT id_element FROM table_2 WHERE column_2=3103
用了不到0.002s(并导致2行)。
然后,当我做
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
这是同样的:0.002s。
我想知道为什么MySQL正在做这样的第一个查询,需要比最后2个查询分开更多的时间?它是从子查询的结果中选择某些内容的最佳解决方案吗?
其他详细信息:table_1
约有。 9000行,table_2
有90000行。
后,我从table_2
加在column_2
索引,第一个查询了0.15秒。
内部选择有多少结果? – Dani 2009-11-08 14:18:38
你可以发布运行'EXPLAIN SELECT * FROM table_1 WHERE id IN(SELECT id_element FROM table_2 WHERE column_2 = 3103)''的结果。这将显示MySQL正在使用的查询计划和索引。 – 2009-11-08 14:19:38
@Dani帖子指出内部查询返回2行。 – 2009-11-08 14:20:47