有誰能夠解釋我爲什麼這個查詢需要13秒時:T-SQL:如果我使用表變量,爲什麼我的查詢更快?
SELECT Table1.Location, Table2.SID, Table2.CID, Table1.VID, COUNT(*)
FROM Table1 INNER JOIN
Table2 AS ON Table1.TID = Table2.TID
WHERE Table1.Last = Table2.Last
GROUP BY Table1.Location, Table2.SID, Table2.CID, Table1.VID
而這一次只需要1秒:
DECLARE @Test TABLE (Location INT, SID INT, CID INT, VID INT)
INSERT INTO @Test
SELECT Table1.Location, Table2.SID, Table2.CID, Table1.VID
FROM Table1 INNER JOIN
Table2 AS ON Table1.TID = Table2.TID
WHERE Table1.Last = Table2.Last
SELECT Location, SID, CID, VID, COUNT(*)
FROM @Test
GROUP BY Location, SID, CID, VID
當我從第一次查詢中刪除GROUP BY需要只需1秒太。我也嘗試寫一個子選擇符並對結果進行分組,但它也需要13秒。我並不是無視這一點。
好的,謝謝。我雖然認爲GROUP BY是在WHERE之後執行的,所以查詢也會將較小的結果集分組。 – Torben 2009-10-21 11:48:10
SQL可以做到這一點,但它也不能。要做的事情越是「猜測」,那麼錯誤發生的可能性就越大。因此,索引或過濾結果可以在這種情況下幫助它。正如Jim G所說,比較執行計劃,它會告訴你究竟有什麼區別。 – 2009-10-21 12:39:33