zoukankan      html  css  js  c++  java
  • 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的占用率不高------------------------------------------------------

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

  • 相关阅读:
    2019省赛训练组队赛4.9周二 2017浙江省赛
    #Leetcode# 49. Group Anagrams
    #Leetcode# 57. Insert Interval
    POJ 2195 Going Home
    HDU 2255 奔小康赚大钱
    HDU 1083 Courses
    HDU 2063 过山车
    POJ 3041 Asteroids
    指针的妙处
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
  • 原文地址:https://www.cnblogs.com/zigewb/p/3088856.html
Copyright © 2011-2022 走看看