有谁能够解释我为什么这个查询需要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