2010-09-20 61 views
1

使用SQL2k5并假定[ID]列是聚簇PK并且[FK ...]列有两个查询中的非聚簇索引, WHERE子句更有效率?在联合查询中查询FK或PK更好吗

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 

是一个比较理想的或比其他的更好吗?性能差异是否会在一个之上引人注目?

+1

是table11真的是table1的拼写错误吗? – 2010-09-20 18:53:33

回答

2

运行以下命令:

SET SHOWPLAN_ALL ON 

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

我敢打赌,他们显示完全相同的执行计划。不管你如何做,执行计划都会得到最优化。但是,尽管如此,我仍然会像第一个版本那样对其进行编码,因为人们更清楚地了解您的意图是什么。

+0

你是对的。他们完全一样。谢谢! – heath 2010-09-20 19:07:02

1

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