2012-09-06 32 views
1

在下面的兩個查詢中,結果集是相同的,但我想知道由於ON子句中的比較參數的順序是否會有任何速度差異。ON子句變量順序 - 優化

在第一個查詢中,它匹配table1.c1 = table2.c1,第二個查詢匹配table1.c1 = table2.c1

SELECT * FROM table1 JOIN table2 ON (table1.c1 = table2.c1) 

或者

SELECT * FROM table1 JOIN table2 ON (table2.c1 = table1.c1) 
+1

如果有一個區別,那將是一個很重要的理由考慮刪除產品 - SQL,就是要表達「你想要什麼」,而不是「怎樣做」。您已經在兩種情況下表達了相同的期望輸出,它應該產生相同的查詢計劃。 –

回答

0

這兩個查詢是嚴格相同的,它們之間沒有什麼區別。

這只是一個約定使用第一種形式:

SELECT * FROM table1 JOIN table2 ON (table1.c1 = table2.c1) 
+0

謝謝,正如我所料,但過去幾天一直困擾着我。 – Drahcir

+0

在這個問題上,最重要的是你必須很好理解:[**邏輯查詢處理階段**](http://blog.sqlauthority.com/2009/04/06/sql-server -logical-query-processing-phases-order-of-statement-execution /)。 –

0

自從ON子句中的布爾表達式返回TRUE,一個記錄將被髮送到結果集輸出。如果其中一個表返回0記錄,即使ON子句返回TRUE,結果集也將爲空。所以在ON子句中如何編寫一個布爾表達式沒有任何區別。像這意味着交叉加入!

乾杯

Select * 
    From dbo.Person As A 
    Inner Join 
     dbo.PersonOrder As B 
    On 1  = 1