我有以下内容,它立即返回5行:
SELECT CollID
FROM FabricView
WHERE MfgID = 30023
GROUP BY CollID
但是,当我执行以下操作时,需要9秒钟:
SELECT CollID,CollName
FROM Coll
WHERE CollID IN(
SELECT CollID
FROM FabricView
WHERE MfgID = 30023
GROUP BY CollID
)
我认为因为内部选择过快,只返回5行,所以外部选择也是瞬时的,但事实并非如此。
编辑:以这种方式重写会产生快速结果:
WITH CTE AS(
SELECT CollID
FROM FabricView
WHERE MfgID = 30023
GROUP BY CollID
)
SELECT Coll.CollID,CollName
FROM Coll
JOIN CTE
ON Coll.CollID = CTE.CollID
答案 0 :(得分:1)
如果您已经使用上一个查询解决了(我认为是),请忽略此答案:
相反,您可以使用EXISTS语句代替od IN子句,这样:
SELECT CollID,CollName
FROM Coll
WHERE EXISTS
(
SELECT 'FABRIC'
FROM FabricView F
WHERE F.MfgID = 30023
AND F.CollID = Coll.CollID
)
通过这种方式,您不使用GROUP BY,在最新版本的Sql Server中,EXISTS比IN更有效(自2008年起)。