我正在执行以下mysql查询:
SELECT * FROM foo WHERE foo.ID IN (SELECT bar.ID FROM bar)
我已经了解到bar
的内部查询会将ID属性的集合/表格返回给外部查询。我认为这发生在一步,因为内部查询完全独立于外部查询(在这种情况下)
但是,内部查询似乎一个接一个地返回所有找到的ID,导致许多Sending data
进度(每个返回的ID一个)。这是非常低效的。特别是当我将bar.ID
的结果手动放入IN
语句(例如,1,2,3,4,...,70,71)时,它的速度更快,即使ID的数量相同。
有没有办法告诉MySQL内部查询是独立的,应该一次性发送所有找到的ID?
编辑1:以下是尝试执行LEFT OUTER JOIN
时给出的解释输出:
查询:
SELECT * FROM foo
LEFT OUTER JOIN bar ON foo.ID=bar.ID
WHERE bar.Value > 1000
ORDER BY foo.ID ASC
答案 0 :(得分:1)
请改为尝试:
SELECT foo.* FROM foo
INNER JOIN bar ON foo.ID=bar.ID AND bar.Value > 1000
ORDER BY foo.ID ASC
答案 1 :(得分:0)
您可以考虑将查询转换为使用JOIN
而非(INNER JOIN
),如下所示。根据您的查询要求,您也可以选择执行OUTER JOIN
。
SELECT f.* FROM foo f
JOIN bar b ON f.ID = b.ID;
使用EXISTS
SELECT * FROM foo f
WHERE EXISTS (select 1 FROM bar WHERE ID = f.ID);