2012-04-26 42 views
3

是否有在結果或差這兩個語句/實例之間在性能上的差異:是必要的連續關係時進行多次加入

實施例1(連續內在關係)實施例2

SELECT ID FROM TABLE T 
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID 
    INNER JOIN TABLE3 T3 ON T2.ID = T3.ID 

(非連續的內在關係)

SELECT ID FROM TABLE T 
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID 
    INNER JOIN TABLE3 T3 ON T.ID = T3.ID 

或之間這些2條語句/例子:

實施例1(連續LEFT關係)

SELECT ID FROM TABLE T 
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID 
    LEFT JOIN TABLE3 T3 ON T2.ID = T3.ID 

實施例2(非連續的LEFT關係)

SELECT ID FROM TABLE T 
    INNER JOIN TABLE2 T2 ON T.ID = T2.ID 
    LEFT JOIN TABLE3 T3 ON T.ID = T3.ID 

的唯一區別是在第二Join是在而第一個例子是Table2。我非常肯定他們會回報同樣的事情,但我只是在這裏尋找更有經驗的答案。謝謝。

+0

您是否比較了實際執行計劃? – 2012-04-26 16:57:22

+0

結果應該是一樣的。 – 2012-04-26 16:58:08

+0

我的確認爲結果會是一樣的,但在性能方面如何? – 2012-04-26 16:58:37

回答

3

結果沒有區別。這些陳述在功能上是等同的。

性能的差異取決於特定的數據庫和版本以及數據。

我的經驗是,在這樣的簡單情況下,兩個查詢之間的性能通常沒有差異。 SQL2008優化器將根據統計數據(表的大小,索引的可用性)以任何順序運行連接,無論您以何種方式編寫此查詢。

+0

它是否也適用於其中包含'LEFT'語句的示例? – 2012-04-26 17:10:42

+0

是的,最後的LEFT JOIN仍然是一樣的。如果LEFT JOIN在INNER JOIN之前,那麼會在第一個和第三個表中產生不同的結果,而不是第二個。 – JAQFrost 2012-04-26 20:14:33