4W条人才表循环处理业务sql优化过程

场景:

使用windows服务定时更新合同数据:执行存储过程(pas_RefreshContractStatus),但存储过程里面有一个需要更新4W条人才表循环处理业务

问题:

循环更新4W条人才表状态字段

优化前:

 

     UPDATE  pt
        SET     StatusText = CASE 
                                  WHEN EXISTS ( SELECT  1
                                    FROM    pas_ContractQuit c
                                    WHERE   IsActive=1 AND ','+TalentIDs+',' LIKE '%,'+CONVERT(NVARCHAR(20),pt.ID)+',%')
                                  THEN '已退租'
                                  ELSE '未申请'
                             END
        FROM    pas_Talent pt

 

耗时:1分07秒

优化后:

 

--定义人才行转列start
SELECT  b.col ID
INTO    #TalentIDs
FROM    pas_ContractQuit c
        OUTER APPLY ( SELECT    *
                      FROM      dbo.Split(TalentIDs, ',')
                    ) b
WHERE   IsActive = 1
        --定义人才行转列end

UPDATE  pt
SET     StatusText = CASE WHEN EXISTS ( SELECT  1
                                        FROM    #TalentIDs
                                        WHERE   pt.ID = #TalentIDs.ID )
                          THEN '已退租'
                          ELSE '未申请'
                     END
FROM    pas_Talent pt

 

耗时:2秒

 

posted @ 2017-01-24 15:35  阳光总在风雨...  阅读(243)  评论(0编辑  收藏  举报