sql语句优化,请高手指点!!!! 20chenshuwei520]

发布时间:2017-2-27 23:54:20 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"sql语句优化,请高手指点!!!! 20chenshuwei520]",主要涉及到sql语句优化,请高手指点!!!! 20chenshuwei520]方面的内容,对于sql语句优化,请高手指点!!!! 20chenshuwei520]感兴趣的同学可以参考一下。

各们大侠好!  现在我在做一个数据验证功能。判断我的条码是否已经成功扫描到我的系统中 我的表:   DISPR008L    DISPD00F 上面的表是记录成功扫描到系统的条码,  DISPR008L,DISPD00F两个表联合才能产生一个条码,而且是唯一的  ELEMS21L   DISFD05L 这个是包含所有的条码 ELEMS21L, DISFD05L两个表联合才能产生一个条码,而且是唯一的 我现在的思路就是下面的代码 select a.* from  ( select cqtele,qcddis,qstepn,qcdmac,qcdmap,celeme,(CELEME ||cast(QSTEPN as char(3))) as barcode from elems21l,disfd05l where qcddis=ccddis and crect0='R' and qcddis='001187' and  qstepn=950) as a   where a.barcode not in (                            select (scdel0||cast(lstepn as char(3))) as barcode from  dispr08l,dispd01l where sindtr=lindtr  and lcddis='001187' and qstepn=950)  我这样写要运行40秒才能做出来,各位大侠给指点一下。看怎么写才最优化,速度快

好象不是MS—SQL的

感觉没什么优化的

是啊,这是DB2的SQL

DISPR008L,DISPD00F两个表联合才能产生一个条码?? 最好给出完整的表结构,测试数据,计算方法和正确结果.

友情帮顶哈

加内存和CPU吧

看数据量,如果内表数据量大用IN会很慢,改成临时表试试

写这么一团代码,好用吗?别人看得懂?自己过一段时间看得懂?交接给别人,他看得懂? DB2可以自动调节缓存,只要把SQL写得好一点就没问题,建议: 1、写个存储过程,这样可以预编译,提高成本估算效率 2、DB2的临时表非常好用啊,怎么不多利用一下呢。DECLARE GLOBAL TEMPORARY TABLE SESSION.aaa()3、用你的表DISPR008L DISPD00F 联合生成一个条码做主键的临时表 my,联合键尽量用到索引    用所有表ELEMS21L  DISFD05L 联合生成一个条码做主键的临时表 all,联合键尽量用到索引 判断你的输入参数,是否即在my中,又在all中

不知道NOT IN 里面有多少符合结果的数据.

不懂,路过,帮顶!

谢谢!各位的指点!!那我就改用临时表试一下。。。。

DB2可以自动调节缓存,只要把SQL写得好一点就没问题,建议:  1、写个存储过程,这样可以预编译,提高成本估算效率  2、DB2的临时表非常好用啊,怎么不多利用一下呢。DECLARE GLOBAL TEMPORARY TABLE SESSION.aaa()3、用你的表DISPR008L DISPD00F 联合生成一个条码做主键的临时表 my,联合键尽量用到索引    用所有表ELEMS21L  DISFD05L 联合生成一个条码做主键的临时表 all,联合键尽量用到索引 

嵌套用的太多了,用存储过程吧.

路过       帮顶    

试着给表加索引,看看查询速度会不会快点!!

在查询时尽量避免使用*号查询.

路过顶。1.用临时表吧!

create procedure TESDATCPL0/sp_cp_DI0001                 (in div varchar(4),in dispo varchar(6),in stepn integer) result sets 1                                            language sql                                             begin                                                    p1:begin   --建的临时表1                                                declare global temporary table emsBarcode               (                                                          qcddis varchar(6),                                       qstepn integer,                                          celeme varchar(9),                                       cqtele integer,                                          ebarcode varchar(12),                                    adescr varchar(50)                                     ) not logged with replace;                                insert  into                                                        emsBarcode(qcddis,qstepn,celeme,cqtele,ebarcode,adescr)  select              bb.qcddis,bb.qstepn,aa.celeme,aa.cqtele,(aa.CELEME||cast(bb.QSTEPN   as char(3))) as barcode,trim(cc.adescr) as adescr from               TESDATCPL0/elems21l as aa,TESDATCPL0/disfd05l as                     bb,TESDATCPL0/wcpro01l as cc where bb.qcddis=aa.ccddis and           cc.acdmac=bb.qcdmac and cc.acdmap=bb.qcdmap and aa.crect0='R' and    bb.qcddiv=aa.ccdume   and bb.qcddis=dispo and bb.qstepn=stepn and aa .ccdume=div;                                                         end p1;                                                              p2:begin                                                              declare global temporary table DisBarcode                           (                                                                       barcode varchar(12)                                               ) not logged with replace;                                             insert into DisBarcode(barcode)   select  (b.scdel0||cast(a.lstepn as  char(3))) as barcode from      TESDATCPL0/dispr08l as a,TESDATCPL0/dispd01l as b                    where  a.lcddiv=b.scddiv and b.sindtr=a.lindtr  and a.lcddis=dispo and a.lstepn=stepn and a.lcddiv=div;      --建立一个索引 create index bar on  DisBarcode(barcode); end p2;                                                             p3:begin                                                            declare c1 cursor with return for                                   select qcddis,qstepn,celeme,cqtele,ebarcode as barcode,adescr from emsBarcode   where ebarcode not in(select barcode from disBarcode);   open c1;                                                            end p3; end 

上一篇:数据插入数据库时自动填充空白ID 40flash8627]
下一篇:【急需--数据库技术】 300feixianxxx]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。