0
我一直致力於MS SQL Server,並且一直遵循標準SQL查詢進行INNER JOIN並根據條件篩選結果集。使用INNER JOIN作爲過濾器的性能和優點/缺點
最近,我正在處理一個大表,它以某種方式導致整個查詢耗時很長時間來執行查詢。
下面只是對情況的模擬查詢。
Select * FROM Customer a
INNER JOIN ProcessTable PT WITH(NOLOCK) on PT.custID = a.ID
INNER JOIN AuditTrailTable AT WITH(NOLOCK) on AT.custID = a.ID
WHERE AT.DATESTAMP > 'Some date time'
我的同事想出了一個新的查詢,如下
Select * FROM Customer a
INNER JOIN ProcessTable PT WITH(NOLOCK) on PT.custID = a.ID
INNER JOIN AuditTrailTable AT WITH(NOLOCK) on AT.DATESTAMP > 'Some date time' AND AT.custID = a.ID
中,我發現他已經把篩選子句的INNER JOIN的一部分
。
儘管它返回相同的結果,但我想知道這種方法的性能增益以及我沒有注意到的利弊。這會是一個很好的使用方法嗎?
*「條件是在on子句還是where子句對於內部連接無關緊要」* >>我從經驗中知道情況並非總是如此。至少在一個項目中的一個案例中,將幾個條件從WHERE子句移動到JOIN子句允許查詢優化器獲得更好的執行計劃。無可否認,查詢比來自OP的查詢更爲複雜。所以我不會在這樣的陳述中概括它。 –
@TT。 。 。 。以下是參考資料:http://dba.stackexchange.com/questions/61220/putting-a-condition-related-to-a-table-in-join-is-better。你可能會遇到不同的事情。如果連接條件在您的查詢中非常複雜,那麼SQL Server可能不會考慮所有可能的連接組合。在這種情況下,會考慮「隨機」連接子集,這可能會因表和連接條件的順序而有所不同。但是,是否產生更好或更差的計劃完全是任意的。 –