[英]MySQL Query Select using sub-select takes too long
从2个表执行select时我注意到了一些奇怪的事情:
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为什么会这样做第一个查询,比最后两个查询分别花费更多的时间? 它是根据子查询结果选择内容的最佳解决方案吗?
其他细节: table_1
。 9000行, table_2
有90000行。
从table_2
在column_2
上添加索引后,第一个查询占用了0.15秒。
查询分析器可能会评估每行的子查询。
尝试使用INNER JOIN替换子查询,看看是否可以提高性能:
SELECT *
FROM table_1 t1
INNER JOIN table_2 t2
ON t1.id = t2.id_element
AND t2.column_2 = 3103
这是ver 6之前的mysql中的已知错误。
我找到的解决方法是:
SELECT * FROM table_1 WHERE id IN(SELECT id_element FROM(SELECT id_element FROM table_2 WHERE column_2 = 3103)as q)
我也有同样的问题。 我为表添加了一个INDEX(猜测你已经有)并使用了USE INDEX指令。 在你的情况下,它应该是这样的:
SELECT * FROM table_1 USE INDEX(id)
WHERE id IN (SELECT id_element FROM table_2 WHERE column_2=3103);
对我来说它让事情变得更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.