2012-10-09 240 views
1

創建連接2個表的查詢時。我想到了2種可能的方式來編寫查詢。 下面是一個簡單的例子。你能否讓我知道哪個更快?SQL Server查詢優化 - WHERE子句與SELECT子查詢

SELECT t1.a, 
     t2.a 
FROM table1 t1 
     JOIN table2 t2 
     ON t1.b = t2.b 
WHERE t2.c = 'test' 

OR

SELECT t1.a, 
     t2.a 
FROM table1 t1 
     JOIN (SELECT a, b 
      FROM table2 
      WHERE c = 'test') t2 
     ON t1.b = t2.b 
+0

我冒昧地在派生表的選擇列表中添加'b',因爲@podiluska指出沒有它,第二個甚至不會編譯使整個問題變得毫無意義。 –

回答

5

他們應該給出完全相同的計劃。

SQL Server將很容易將一個轉換爲另一個。檢查執行計劃是確定的唯一途徑。

1

這取決於你的數據,你的數據結構。

您可以使用SSMS中「查詢」菜單上的「包括實際執行計劃」選項來了解自己。

我想說的第一個選項是清晰的,但。

此外,寫入的第二個查詢實際上不會工作。

+3

RE:「這取決於」。你能否提供任何計劃不一樣的情況? –

+0

不,但你能證明他們永遠是一樣的嗎? – podiluska

+1

當然沒有。因爲這需要我徹底地測試無限量的查詢。我想知道你是否遇到過事實上取決於它的情況。 –

0

如果你在table1.id和table2.id列上有適當的索引,那麼我認爲第一個查詢的性能會更好。