zoukankan      html  css  js  c++  java
  • 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秒

  • 相关阅读:
    JSONP
    函数式编程
    Cookie
    IE userData
    Web Storage
    前端学PHP之会话Session
    数据结构之归并排序
    数据结构之冒泡排序
    数据结构之插入排序
    数据结构之选择排序
  • 原文地址:https://www.cnblogs.com/bwlluck/p/6347272.html
Copyright © 2011-2022 走看看