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的占用率不高------------------------------------------------------
待续,遇到其他的优化技巧会增加。