2013-10-03 106 views
1

按照該鏈接加入:的SQL Server 2008 R2:十字其中Vs內部連接性能

MSDN link

它說,如果一個交叉連接具有where子句中它表現爲一個內部聯接,並返回相同作爲內部連接的結果。

我明白那一部分。但我的問題是,當我使用where條件的查詢交叉連接和使用ON子句的Inner連接的另一個查詢時,兩者使用相同的關係並返回相同的數據,性能是否會有所不同?

如果在INNER或LEFT OUTER JOIN上將第三個/第四個表與這兩個表連接,性能是否會受到影響?

我找不到在Web上尋找相同的SQL Server的直接答案。

  • 吉里賈·

  • 吉里賈·

+0

與where條件的交叉連接不一定是內部連接,它取決於where條件。 – HLGEM

+1

試試並比較執行計劃。 – HABO

回答

2

如果你正在談論的交叉連接與在爲隱含條件cpmarision加入到明確連接,他們往往有相同的執行計劃。然而,這可能隨着查詢變得更加複雜(可能難以預測引擎如何選擇執行復雜查詢),但可能不會,除非它變得非常複雜。你可以隨時檢查執行計劃,看看是否發生這種情況。

在任何情況下,你都不應該使用隱式聯接,它們是一個sql反模式,有幾個原因,第一個是他們可以很容易地創建一個意外的交叉聯接,其性能很昂貴,不正確的查詢結果或添加DIstinct的要求也很昂貴。此外,您不應該混合使用隱式連接和顯式連接(您可能會得到錯誤的結果),如果稍後必須進行左連接,則需要重新編寫整個查詢。所以隱式連接難以維護。最後,如果你需要一個真正的交叉連接,從隱式synzat中不明顯你是想要交叉連接還是意外連接。這可能會讓維護工作變得特別困難。