我有一個表(我們稱之爲A)SQL Server 2016中,我想查詢。我只需要選擇那些具有確定狀態的行,所以我需要排除一些行。還有另一個表(B),其中包含來自表A的記錄ID和兩列col1和col2。如果這些列是非空的,則相應的記錄可以被認爲是最終的。表A和表B之間存在一對一的關係。由於這些表非常大,我想使用最有效的查詢。我應該選擇哪一個?哪個是運行此SQL查詢最快的方法?
SELECT *
FROM TableA
WHERE record_id IN
(SELECT record_id FROM TableB WHERE col1 IS NOT NULL AND col2 IS NOT NULL)
SELECT a.*
FROM TableA a
INNER JOIN TableB b ON a.record_id = b.record_id
WHERE b.col1 IS NOT NULL AND b.col2 IS NOT NULL
SELECT a.*
FROM TableA a
INNER JOIN TableB b
ON a.record_id = b.record_id
AND b.col1 IS NOT NULL
AND b.col2 IS NOT NULL
當然,如果有更快的方式,我沒有想到,請分享。我也很想知道爲什麼一個查詢比其他查詢更快。
請閱讀Eric Lippert的優秀[哪個更快?](https://ericlippert.com/2012/12/17/performance-rant/):「...如果你有兩匹馬,你想知道哪些二者之間的距離越大,你的馬匹的速度越快,不要寫簡短的馬匹描述,在互聯網上發佈,並要求隨機的陌生人猜猜哪個更快......「 –
爲什麼你不試試它並找到出來嗎? –
我做過了,但結果各不相同。差異是相當顯着的(〜20%),但更快的查詢並不總是一樣的... –