SQL优化

 

 
          WITH S1 as (
          SELECT HANDLE ,SITE,OPERATION,DCOP_NUMBER,RESRCE
          ,CREATED_DATE_TIME
          ,TO_CHAR(CREATED_DATE_TIME +INTERVAL '8' HOUR,'YYYY-MM-DD HH24:MI:SS') as DTime
          ,TYRE_CODE  
          FROM Z_DCOP_COLLECT_LOG
          )
          select distinct S1.* ,S2.PARAMETER_NO,S5.DC_VALUE_MASK ,S2.VALUE
          ,S3.START_USER ,S4.BIG_PRINT,S4.PRODUCT_DESCRIPTION,S5.FS
          ,S5.DESCRIPTION
          from S1
          inner join Z_DCOP_COLLECT_DETAIL_LOG S2 on S1.HANDLE=S2.DCOP_COLLECT_BO and S1.SITE=S2.SITE
          inner join 
          (
          select distinct TYRE_CODE,SITE,START_USER,ITEM_BO
          from Z_CUSTOM_PRODUCTION_LOG
          ) S3 on S1.TYRE_CODE=S3.TYRE_CODE and S1.SITE=S3.SITE
          inner join (
          select distinct ITEM,SITE,BIG_PRINT,PRODUCT_DESCRIPTION 
          from Z_CUSTOM_ITEM
          ) S4 on S4.item=SUBSTR(S1.DCOP_NUMBER,1,INSTR(S1.DCOP_NUMBER,'_',1,1)-1) and S4.SITE=S1.SITE 
          inner join (
          select DC_GROUP_BO,PARAMETER_NAME
          ,DC_VALUE_MASK,DESCRIPTION 
          ,(case when substr(PARAMETER_NAME,1,instr("PARAMETER_NAME",'_',1,1)-1)='UF' then 'UF'
                 when substr(PARAMETER_NAME,1,instr("PARAMETER_NAME",'_',1,1)-1)='DB' then 'DB' 
                 when substr(PARAMETER_NAME,1,instr("PARAMETER_NAME",'_',1,1)-1)='WEIGHT'  then '磅秤'  
            else '其他' end ) as FS
          from DC_PARAMETER where (DC_VALUE_MASK  like '1201%' or DC_VALUE_MASK  like '1202%') and length(DC_VALUE_MASK)=7
          ) S5 on S2.PARAMETER_NO=S5.PARAMETER_NAME and  S1.SITE=SUBSTR(S5.DC_GROUP_BO,11,4)
         
where  1=1 ${if(len(生产厂区)=0,""," and S1.site='"+生产厂区+"'")}
           ${if(len(测定机台)=0,""," and S1.RESRCE='"+测定机台+"'")}
           ${if(len(FS)=0,""," and FS='"+FS+"'")}
           ${if(len(轮胎规格)=0,""," and PRODUCT_DESCRIPTION='"+轮胎规格+"'")}
           ${if(len(起始条码)=0,""," and TO_NUMBER(S1.TYRE_CODE)>='"+起始条码+"'")}  
           ${if(len(结束条码)=0,""," and TO_NUMBER(S1.TYRE_CODE)<='"+结束条码+"'")}  
           and DTime
           between '${开始时间}'||' '||'${开始小时}'||':'||'${开始分钟}'
           and '${结束时间}'||' '||'${结束小时}'||':'||'${结束分钟}'

如图:这一段sql执行时间2s左右    

image.png

从where 后面开始这些参数都是丢到帆软里面的,我在帆软加上参数 ,结果出不来,说sql执行时间过长,先不说去决策系统改时长,我想知道为啥?因为我参数过多吗?

在帆软的数据集里面注释这些参数后,嘿,结果几秒能出来200行,加了参数就一直出不来,按理说总数据就那么多,咋会执行效率这么低?我这sql是不是要优化的,各位路过的大神有没有啥好办法?

就是一直这种状态,而且我感觉这时间也不是很长

image.png

13182656102 发布于 2019-8-23 17:03 (编辑于 2019-8-23 17:09)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
zsh331Lv8专家互助
发布于2019-8-23 17:11

问题应该出现在这里,字段类型与过滤内容类型应该不匹配。排查下!


image.png

  • 13182656102 13182656102(提问者) 大神时间格式没错,之前用过好多次,早上检查,发现一个参数值输错了
    2019-08-24 08:26 
最佳回答
0
Doctor_WeiLv7中级互助
发布于2019-8-24 08:26

老铁可以把参数先去掉,在sql中执行一下,加上where 看看执行的效率如何

,先排除是语句的问题还是其他的问题

  • 13182656102 13182656102(提问者) 是的,不加参数能出来,我一个参数值输错了,早该想到的,这么短时间,不可能加参数就查不出来
    2019-08-24 09:47 
  • 3关注人数
  • 323浏览人数
  • 最后回答于:2019-8-24 08:26
    请选择关闭问题的原因
    确定 取消
    返回顶部