考慮:SQL查詢優化JOIN
數據表Y
id int clustered index
name nvarchar(25)
表anothertable
id int clustered Index
name nvarchar(25)
表someFunction
- 然後做一些數學返回一個有效的ID
比較:
SELECT y.name
FROM y
WHERE dbo.SomeFunction(y.id) IN (SELECT anotherTable.id
FROM AnotherTable)
VS:
SELECT y.name
FROM y
JOIN AnotherTable ON dbo.SomeFunction(y.id) ON anotherTable.id
問題:
雖然定時這兩個查詢出我發現,在大的數據集使用IN
所述第一查詢的速度要快得多然後使用INNER JOIN
所述第二查詢。我不明白爲什麼有人可以幫忙解釋一下。
請參閱優化器/解釋計劃 - 我們無法告訴您數據發生了什麼。 –
我不知道,但我猜想這是因爲在IN情況下它從另一個表獲得id的列表一次,而在INNER連接中,它有效地準備記錄的全部外部產品並檢查每一個。您的函數調用阻止它對其自身進行任何優化。 –
@OMG小馬 - 我注意到這個使用多個不同的數據集。這是我覺得數據不可知的行爲。 – gh9