我有一个简单的问题,哪个查询更有效?
查询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行。
答案 0 :(得分:3)
我之所以回答的原因是因为这两者可能具有完全相同的执行计划。运行查询有两个阶段。第一种是解析和优化查询。第二个是执行它。
SQL Server有一个很好的优化引擎。因此,它将忽略不必要的子查询。请记住:运行的代码与您编写的代码非常不同。运行的代码也已经过优化。
答案 1 :(得分:0)
正如评论者所提到的,检查执行计划以确定哪个查询的成本较低。
我希望查询2更快,假设NumUnicoSoldadura
在两个表上都被索引。在第一个查询中,风险是子查询可能会为两个表加载内存中的所有数据,然后在NumUnicoSoldadura
上进行比较。查询分析器很聪明,可以减轻这种风险,但可以通过检查执行计划进行仔细检查。
答案 2 :(得分:0)
如果没有更多信息,请更喜欢查询#2。