SQL如何评估嵌套查询?如果他们的意思相同,为什么联合会更好

时间:2014-02-04 16:08:20

标签: mysql

我有2个查询应该生成完全相同的结果集

首先查询:

SELECT * 
FROM rms_tests where Id in (SELECT TestId 
                            FROm rms_test_results 
                             where RegressionResultID = 106967 
                               and Failed is NULL);

第二次查询:

SELECT t.* 
FROM rms_test_results tr 
   LEFT JOIN rms_tests t ON tr.testid=t.id 
where tr.regressionresultId = 106967 
and tr.failed is NULL;

然而,第二个需要0.008秒,而第一个永远不会完成并挂起我的“MySQL查询浏览器”#34;。

SQL如何评估类型1的查询导致它们爆炸并永久挂起浏览器。

注意:rms_test_results非常大,比rms_tests大很多倍。 另外你可以看到它们与rms_tests.id = rms_test_result.testid相关

很抱歉,如果这被覆盖在某处。

++++++++++++++++++++++++++++++++++++++++++++ PS 我真的很困惑,因为如果我将查询#1分解为其中两个并一个接一个地执行它们,它们就不会花费任何时间:

SELECT TestId FROm rms_test_results,其中RegressionResultID = 106967和Failed为NULL; SELECT * FROM rms_tests其中Id in(1234,1235,.....);

1 个答案:

答案 0 :(得分:-2)

联接通常可以使用更高效的“执行计划”,而嵌套查询或“子查询”通常不能。

进一步阅读:Join vs. sub-query