北纬30度水域 2016-01-08 06:50 采纳率: 50%
浏览 1777
已结题

informix 数据库查询问题,请求帮忙优化

 CREATE PROCEDURE informix.pro_counteveryday
()
BEGIN
  /* Procedure body */
  define ls_cuid varchar(255);
  define ls_ipv6 varchar(255);
  define ld_count_date datetime year to second;
  define start_date datetime year to second;
  define end_date datetime year to second;
  let start_date = extend(sysdate-interval(1) day to day,year to day);
  let end_date = extend(sysdate day to day,year to day);

  delete from rm_alarm_trans_inserttemp where 1=1;
  --EXECUTE IMMEDIATE 'truncate table rm_alarm_trans_inserttemp';
   --      union all
 foreach select related_city_cuid as regionid,extend(a.revalarm_time,year to day) as startdate ,b.dev_ipv6
 into ls_cuid,ld_count_date,ls_ipv6 from history_alarm as a,alarm_trans_resource as b
        where length(a.related_port_cuid)>0 and length(b.port_cuid)>0 
        and (a.revalarm_time<end_date and a.revalarm_time>=start_date  ) 
        and  a.related_port_cuid=b.port_cuid 
        --and length(b.dev_ipv6)>0 
        and a.alarmobject_type in('物理端口' ,'CTP端口') 
        insert into rm_alarm_trans_inserttemp(regionid,startdate,dev_ipv6) values(ls_cuid,ld_count_date,ls_ipv6);
 end foreach;     

  foreach       select related_city_cuid as regionid,extend(a.revalarm_time,year to day) as startdate,b.dev_ipv6
 into ls_cuid,ld_count_date,ls_ipv6 from current_alarm as a ,alarm_trans_resource as b    
        where (a.revalarm_time<end_date and a.revalarm_time>=start_date ) 
        and a.related_port_cuid=b.port_cuid 
        --and length(b.dev_ipv6)>0 
        and a.alarmobject_type in('物理端口' ,'CTP端口') and length(b.dev_ipv6)>0 
        --is not null 
        if(length(ls_ipv6)>0){
  insert into rm_alarm_trans_inserttemp(regionid,startdate,dev_ipv6) values(ls_cuid,ld_count_date,ls_ipv6);}
 end foreach;  

  foreach      select related_city_cuid as regionid,extend(a.revalarm_time,year to day) as startdate,b.dev_ipv6
  into ls_cuid,ld_count_date,ls_ipv6    from current_alarm as a,alarm_trans_resource as b
        where (a.revalarm_time<end_date and a.revalarm_time>=start_date) 
        and a.related_ne_cuid = b.related_ne_cuid 
        --and length(b.dev_ipv6)>0  
        and a.alarmobject_type='网元'
        if(length(ls_ipv6)>0){
        insert into rm_alarm_trans_inserttemp(regionid,startdate,dev_ipv6) values(ls_cuid,ld_count_date,ls_ipv6);
        }

 end foreach;  
  foreach    select related_city_cuid as regionid,extend(a.revalarm_time,year to day) as startdate ,b.dev_ipv6
    into ls_cuid,ld_count_date,ls_ipv6    from history_alarm as a,alarm_trans_resource as b
        where (a.revalarm_time<end_date and a.revalarm_time>=start_date ) 
        and  a.related_ne_cuid = b.related_ne_cuid 
        --and length(b.dev_ipv6)>0  
        and a.alarmobject_type='网元' and b.dev_ipv6 is not null 
    insert into rm_alarm_trans_inserttemp(regionid,startdate,dev_ipv6) values(ls_cuid,ld_count_date,ls_ipv6);
 end foreach; 
 --       union all

       /* truncate table rm_alarm_trans_souday;

         insert into rm_alarm_trans_souday 
         select b.regionid,b.regionname,b.cityname,nvl(a.alarmnum,0) as alarmnum,nvl(a.startdate,current) as startdate
         from (select cuid as regionid,label_cn as regionname,label_cn_x as cityname from v_district where label_cn = label_cn_x ) as b
         left join (select regionid,startdate,count(regionid) as alarmnum from rm_alarm_trans_inserttemp group by regionid,startdate) as a
         on a.regionid=b.regionid;*/
END;
END PROCEDURE;                                                                                                                                                                              

这个数据量不太大,才一千万以上,当加上 字段的is not null的时候,查询效率非常慢。试过length(字段)>0效果也是不理想。有没有更好的查询?

  • 写回答

1条回答 默认 最新

  • devmiao 2016-01-08 18:59
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?