MySQL:在IN子句中使用查询发送大量“发送数据”

时间:2014-11-27 21:34:36

标签: mysql syntax

我正在执行以下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时给出的解释输出: Output

查询:

    SELECT * FROM foo 
LEFT OUTER JOIN bar ON  foo.ID=bar.ID 
WHERE bar.Value > 1000 
ORDER BY foo.ID ASC

2 个答案:

答案 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);