SQL Server Query Optimization - WHERE 子句与 SELECT 子查询



创建连接 2 个表的查询时。我想到了 2 种编写查询的可能方法。下面是一个简化的示例。你能告诉我哪个会更快吗?

SELECT t1.a,
       t2.a
FROM   table1 t1
       JOIN table2 t2
         ON t1.b = t2.b
WHERE  t2.c = 'test' 

SELECT t1.a,
       t2.a
FROM   table1 t1
       JOIN (SELECT a, b
             FROM   table2
             WHERE  c = 'test') t2
         ON t1.b = t2.b 

他们应该给出完全相同的计划。

SQL Server可以轻松地将一个转换为另一个。不过,检查执行计划是确定的唯一方法。

这取决于您的数据和数据结构。

可以使用 SSMS 中"查询"菜单上的"包括实际执行计划"选项自行查找。

我想说第一个选项更清楚。

此外,编写的第二个查询实际上不起作用。

如果你在 table1.id 和 table2.id 列上有适当的索引,那么我认为第一个查询会表现得更好。

最新更新