sql优化

1.循环中插入数据和删除数据尽量不要放在循环中or同时放在循环中or同一个循环中;

   注意sql中引号的用法(sql中引号的特殊用法在另一篇博文中有详细介绍)。

例子:

改动之后执行时间3分钟多点:

truncate table STORE---------------------------------------删除放在while循环的外边执行速度提高。

set @a=1
set @b=28

while @a<=@b
begin
set @week=201316---------------------------周别
set @ACCT_DT=20130516--------------------日期

set  @STRSQL=''
SET @STRSQL=@STRSQL+'
INSERT INTO  STORE
SELECT
         DT

        ,SCD

        ,ITCD

        ,CNT
FROM  SALES_D_STORE
WHERE dt='''+convert(varchar(10),@ACCT_DT,111)+''' ------------------------------------字符串类型用引号,速度提高。
'
-- EXEC (@STRSQL)
print (@STRSQL)
set @a=@a+1
end

改动之前执行时间24分钟:

set @a=1
set @b=28

while @a<=@b
begin
set @week=201316
set @ACCT_DT=20130516

SET @STRSQL=''
SET @STRSQL=@STRSQL+'
delete from STORE where convert(varchar(10),dt,112)='+convert(varchar(10),@ACCT_DT,112)+'-----------------------delete在循环中
INSERT INTO STORE

SELECT
          DT

         ,SCD

         ,ITCD

         ,CNT
FROM   SALES_D_STORE
WHERE convert(varchar(10),dt,112)='+convert(varchar(10),@ACCT_DT,112)+'-----------------------------------------没引号varchar类型
'---------------------------------------------------------------------------------------------------------------黄色标注部分尽量不要产生运算
--EXEC (@STRSQL)
print (@STRSQL)
set @a=@a+1
end

---------------------------改动前后相差二十分钟左右,cpu的占用率不高------------------------------------------------------

待续,遇到其他的优化技巧会增加。

原文地址:https://www.cnblogs.com/zigewb/p/3088856.html