读书人

高手帮忙优化这条SQL语句难!解决思路

发布时间: 2012-01-16 23:36:52 作者: rapoo

高手帮忙优化这条SQL语句,难!
K2.dbo._worklist数据量是20万条,DocumentReceive 10万条,其他表均在200以下
SQL语句如下:
SELECT a.procID,b.ProcName,b.ProcSetID,FROM (SELECT DISTINCT procID FROM K2.dbo._ProcInst WHERE ID IN(SELECT DISTINCT DocumentReceive.ProcInstID
FROM K2.dbo._worklist,DocumentReceive
WHERE K2.dbo._worklist.[User]='chenxh14' AND DocumentReceive.Exigence='平件' AND K2.dbo._worklist.Status IN(0,1) AND K2.dbo._worklist.ProcInstID
NOT IN(SELECT ProcInstID FROM DeletedPendingWorkListItem WHERE Status=0 UNION SELECT ProcInstID FROM DeletedPendingWorkListItem WHERE Status=2)AND K2.dbo._worklist.ProcInstID=DocumentReceive.ProcInstID))a,Process b WHERE a.procID=b.procID ORDER BY b.ProcSetID ASC
在查询分析器里面运行了3分钟都没有出结果,但是我把
SELECT DISTINCT procID FROM K2.dbo._ProcInst WHERE ID IN(SELECT DISTINCT DocumentReceive.ProcInstID
FROM K2.dbo._worklist,DocumentReceive
WHERE K2.dbo._worklist.[User]='chenxh14' AND DocumentReceive.Exigence='平件' AND K2.dbo._worklist.Status IN(0,1) AND K2.dbo._worklist.ProcInstID
NOT IN(SELECT ProcInstID FROM DeletedPendingWorkListItem WHERE Status=0 UNION SELECT ProcInstID FROM DeletedPendingWorkListItem WHERE Status=2)AND K2.dbo._worklist.ProcInstID=DocumentReceive.ProcInstID)
单独拿出来只需要三秒钟(结果只有4行),为什么 SELECT a.procID,b.ProcName,b.ProcSetID,FROM a,Process b WHERE a.procID=b.procID ORDER BY b.ProcSetID ASC这句要执行那么长时间呢?
高手出来帮下忙啊!!!!!!


[解决办法]
in 的效率本来就低,用eists 解决
[解决办法]
sql语句的优化其实就是那么几种方法,临时表、效率低的关键字、用连接代替子查询。
[解决办法]
in 和 eists 根本就没有区别
虽然有些书说有区别
[解决办法]
in 和 exists 根本就没有区别
虽然有些书说有区别

读书人网 >SQL Server

热点推荐