使用SQL2k5并假设[ID]列是聚簇PK且[FK ...]列具有非聚簇索引,在两个查询中,哪个WHERE子句更有效?
SELECT *
FROM [table1]
INNER JOIN [table2] ON [table2].[ID] = [table1].[FK_table2]
INNER JOIN [table3] ON [table3].[ID] = [table1].[FK_table3]
WHERE
[table1].[FK_table2] = @table2_id
AND [table1].[FK_table3] = @table3_id
OR
SELECT *
FROM [table1]
INNER JOIN [table2] ON [table2].[ID] = [table1].[FK_table2]
INNER JOIN [table3] ON [table3].[ID] = [table1].[FK_table3]
WHERE
[table2].[ID] = @table2_id
AND [table3].[ID] = @table3_id
是优先还是优于其他人?使用一个而不是另一个会显着性能差异吗?
答案 0 :(得分:2)
运行这个:
SET SHOWPLAN_ALL ON
然后运行每个版本的查询。它将显示查询的执行计划,而不是结果集。
我敢打赌他们会显示完全相同的执行计划。无论您如何操作,执行计划都将优化为完全相同。但是,我会像第一个版本一样对它进行编码,因为人们在阅读查询时更清楚你的意图是什么。
答案 1 :(得分:1)
我认为这两种方式之间没有任何相关的性能差异。