2010-09-20 44 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

我不認爲這兩種方式之間有任何相關的性能差異。