Sql server 2005 在联接查询中查询FK还是PK更好

Sql server 2005 在联接查询中查询FK还是PK更好,sql-server-2005,performance,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 A

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


一个比另一个好还是更好?使用一种方法比另一种方法的性能差异是否明显?

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

运行以下命令:

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


我敢打赌他们展示的是完全相同的执行计划。无论您如何执行,执行计划都将优化为完全相同。不过,我还是要像第一个版本那样编写,因为阅读查询的人更清楚您的意图。

表11真的是表1的错别字吗?
SET SHOWPLAN_ALL ON