哪个查询更有效?

时间:2015-08-26 18:00:28

标签: sql sql-server

我有一个简单的问题,哪个查询更有效?

查询1:

SELECT t1.NumUnicoEOL,
       t2.NumUnicoSoldadura
FROM   (SELECT NumUnicoEOL,
               NumUnicoSoldadura
        FROM   NumUnicoSoldaduraEOL) AS t1
       LEFT JOIN (SELECT NumUnicoSoldadura,
                         Estado
                  FROM   NumUnicoSoldaduraEOLRechazada) AS t2
              ON t1.NumUnicoSoldadura = t2.NumUnicoSoldadura

查询2:

SELECT t1.NumUnicoEOL,
       t2.NumUnicoSoldadura
FROM   NumUnicoSoldaduraEOL AS t1
       LEFT JOIN NumUnicoSoldaduraEOLRechazada AS t2
              ON t1.NumUnicoSoldadura = t2.NumUnicoSoldadura 

1901268行。

3 个答案:

答案 0 :(得分:3)

嗯。嗯。 。 。我很想回答:花费更少时间和使用更少资源的那个。您可以通过运行查询并查看执行计划来了解这一点。

我之所以回答的原因是因为这两者可能具有完全相同的执行计划。运行查询有两个阶段。第一种是解析和优化查询。第二个是执行它。

SQL Server有一个很好的优化引擎。因此,它将忽略不必要的子查询。请记住:运行的代码与您编写的代码非常不同。运行的代码也已经过优化。

答案 1 :(得分:0)

正如评论者所提到的,检查执行计划以确定哪个查询的成本较低。

我希望查询2更快,假设NumUnicoSoldadura在两个表上都被索引。在第一个查询中,风险是子查询可能会为两个表加载内存中的所有数据,然后在NumUnicoSoldadura上进行比较。查询分析器很聪明,可以减轻这种风险,但可以通过检查执行计划进行仔细检查。

答案 2 :(得分:0)

如果没有更多信息,请更喜欢查询#2。