在连接查询中查询FK或PK是否更好?

时间:2010-09-20 18:44:37

标签: sql-server-2005 performance

使用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

是优先还是优于其他人?使用一个而不是另一个会显着性能差异吗?

2 个答案:

答案 0 :(得分:2)

运行这个:

SET SHOWPLAN_ALL ON

然后运行每个版本的查询。它将显示查询的执行计划,而不是结果集。

我敢打赌他们会显示完全相同的执行计划。无论您如何操作,执行计划都将优化为完全相同。但是,我会像第一个版本一样对它进行编码,因为人们在阅读查询时更清楚你的意图是什么。

答案 1 :(得分:1)

我认为这两种方式之间没有任何相关的性能差异。