日期:2014-05-17  浏览次数:20633 次

请教如何把带子查询的sql语句拆分开写
如题,下面的查询的表有大约5W行记录
UPDATE SwitchTaskInfo
SET ProcessStatus = 39, StartTime = GETDATE(), EndTime = GETDATE(), Remark = '忽略处理'
FROM SwitchTaskInfo a
WHERE 1=1
AND ProcessStatus = 0
AND NOT EXISTS(
SELECT 1 
FROM (SELECT BTSID, MaxTaskID = MAX(TaskID)
FROM SwitchTaskInfo 
WHERE 1=1
AND ProcessStatus = 0
GROUP BY BTSID
) b
WHERE a.BTSID = b.BTSID AND a.TaskID = b.MaxTaskID
)
这个语句测试了下性能很差,索引也加了,应该是子查询造成的,请教如何拆分改写该句子
SQL 性能优化

------解决方案--------------------
可能不是子查询的问题
lz看一下你的索引是否使用,你查看一下你的执行计划
------解决方案--------------------
update a
set ProcessStatus = 39, StartTime = GETDATE(), EndTime = GETDATE(), Remark = '忽略处理'
from SwitchTaskInfo as a
where a.ProcessStatus=0 and not exists(select 1 from SwitchTaskInfo where BTSID=a.BTSID and ProcessStatus=a.ProcessStatus and TaskID>a.TaskID)