我在论坛上经常看到关于exsis与in效率的问题,大多数都说exsis比in效率高,昨天我把我的一个SQL2K的一个视图改了,原来用in的,现改为用exsis,同样的结果,数据只有4235行,用in不用1秒,用exsis耗时23秒.大侠们请分析分析: 用IN(耗时0.01秒):SELECT * FROM dbo.判定结果 WHERE ((工程编号 + 项目编号) IN (SELECT b.工程编号 + b.项目编号 FROM 判定结果 AS b GROUP BY b.工程编号, b.项目编号 HAVING SUM(b.检测项数) > 0))用EXSIS(耗时23秒):SELECT * FROM dbo.判定结果 a WHERE EXISTS (SELECT 1 FROM dbo.判定结果 AS b WHERE a.工程编号 + a.项目编号 = b.工程编号 + b.项目编号 GROUP BY b.工程编号, b.项目编号 HAVING SUM(b.检测项数) > 0 )
几乎一样
oracle中才又区别主要是因为两种数据库产品使用的优化算法不同
用IN(耗时0.01秒):SELECT *
FROM dbo.判定结果
WHERE ((工程编号 + 项目编号) IN
(SELECT b.工程编号 + b.项目编号
FROM 判定结果 AS b
GROUP BY b.工程编号, b.项目编号
HAVING SUM(b.检测项数) > 0))用EXSIS(耗时23秒):SELECT *
FROM dbo.判定结果 a
WHERE EXISTS
(SELECT 1
FROM dbo.判定结果 AS b WHERE a.工程编号 + a.项目编号 = b.工程编号 + b.项目编号
GROUP BY b.工程编号, b.项目编号
HAVING SUM(b.检测项数) > 0
)