WHERE
條款有什麼更好?大表上的SQL WHERE - >先加入小表或將FK直接放在WHERE子句中?
我有一個大桌子,FK到一張小桌子。我可以直接在FK上搜索,或者我可以加入FK表並在連接表上設置WHERE
限制。什麼更好/更好?
所以這個:
SELECT lt.* FROM LargeTable lt
WHERE lt.SomeId in(12,55)
或者這樣:
SELECT lt.* FROM LargeTable lt
INNER JOIN SmallTable st ON lt.SomeId=st.ItemId
WHERE st.Id in(12,55)
我Set statistics time on
測試這一點,但我沒想到這個結果。誰能解釋這裏發生的事情?
第一次測試沒有加入:
(946 row(s) affected)
SQL Server Execution Times:
CPU time = 1544 ms, elapsed time = 1580 ms.
與二測加入
(946 row(s) affected)
SQL Server Execution Times:
CPU time = 2636 ms, elapsed time = 366 ms.
編輯:當我做SELECT Id
代替SELECT *
,然後在不先查詢加入具有較低的經過時間,並且執行計劃中的查詢開銷爲無連接的25%與連接的查詢的75%。
是'lt.Id'索引? – RedFilter 2011-12-21 16:12:49
您應該包含實際的執行計劃,然後並行運行兩個查詢...... SQL Server會告訴您哪一個更快,爲什麼更快。 – 2011-12-21 16:13:39
+1爲實際執行計劃。無需猜測。 – 2011-12-21 16:21:54