查看: 3347|回复: 2

[讨论] SQL 查询速度慢,如何优化啊!

[复制链接]
论坛徽章:
0
发表于 2011-4-21 15:56 | 显示全部楼层 |阅读模式
SQL 语句如下:
select    z.site,
          z.product_id,
          tmw.work_order,
          tmw.model,
          tmw.date_released As "WO_Realeased_Date",
          z.PID_ISSUE_DATE As "PID_ISSUE_DATE",
          z.Cal_Test_Date As "Cal_Test_Date",
          z.PCB_LOT_ID As "PCB_LOT_ID",
          z.PCB_LOT_COMBINE As "PCB_LOT_COMBINE",
          z.LG_Receiving As "LG_Receiving",
          z.FNL_INPUT As "FNL_INPUT",
          k.esn_date as "IMEI_date",
          k.out_date As  "Master_date",
          z.PACK_OQC_Date As "PACK_OQC_Date",
          k.packid_date "Pallet date"
from      
(select A.site,
       A.Product_Id product_id,
       (Select Max(t.work_order) From  TB_SIDE_BCRHISTORY t
          Where t.suffix=Substr(a.product_id,0,11)
               And Substr(a.product_id,12) Between t.start_serial_no And t.end_serial_no
       ) As work_order,
       A.Created_Date As  PID_ISSUE_DATE,
       (select max(Created_Date)
          from tb_qlty_tstrslt
         where product_id = A.Product_Id
           and result = 'P'
           and operationname = 'PCB2300') As Cal_Test_Date,
       (select max(lot_id)
          from tb_mmif_pidinfo
         where shop = 'PCB'
           and Product_id = A.Product_Id)  As PCB_LOT_ID,
       (select max(created_date)
          from tb_mmif_pidinfo
         where shop = 'PCB'
           and Product_id = A.Product_Id) As PCB_LOT_COMBINE,
       (select max(created_date)
          from tb_mmif_txnhistory
         where lot_Id in (select max(lot_id)
                            from tb_mmif_pidinfo
                           where shop = 'PCB'
                             and Product_id = A.Product_Id)
           and account = '204') As LG_Receiving,
       (select max(created_date)
          from tb_mmif_fnlinputhistory
         where product_id = A.product_id
           and return_flag = 'N') As FNL_INPUT,
       (Select max(created_date)
          from tb_qlty_oqclotrslt
         where oqclotid = C.Pallet_Id
           and test_status in ('C', 'U', 'P', 'Q', 'E')) As PACK_OQC_Date
  from tb_side_idinfo A,tb_mmif_esn C
Where a.product_id = c.product_id
  and a.created_date between to_date('2011-04-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                          and to_date('2010-04-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
   and a.site ='CX'
) z,
cjmesmgr.tbg_prod_master k,
tb_mstr_workorder tmw
where z.product_id=k.prod_no
And tmw.work_order=z.work_order
And tmw.model ='GS290' -->这里写型号
Union All
select    z.site,
          z.product_id,
          tmw.work_order,
          tmw.model,
          tmw.date_released As "WO_Realeased_Date",
          z.PID_ISSUE_DATE As "PID_ISSUE_DATE",
          z.Cal_Test_Date As "Cal_Test_Date",
          z.PCB_LOT_ID As "PCB_LOT_ID",
          z.PCB_LOT_COMBINE As "PCB_LOT_COMBINE",
          z.LG_Receiving As "LG_Receiving",
          z.FNL_INPUT As "FNL_INPUT",
          k.esn_date as "IMEI_date",
          k.out_date As  "Master_date",
          z.PACK_OQC_Date As "PACK_OQC_Date",
          k.packid_date "Pallet date"
from      
(select A.site,
       A.Product_Id product_id,
       (Select Max(t.work_order) From  TB_SIDE_BCRHISTORY t
          Where t.suffix=Substr(a.product_id,0,11)
               And Substr(a.product_id,12) Between t.start_serial_no And t.end_serial_no
       ) As work_order,
       A.Created_Date As  PID_ISSUE_DATE,
       (select max(Created_Date)
          from tb_qlty_tstrslt
         where product_id = A.Product_Id
           and result = 'P'
           and operationname = 'PCB2300') As Cal_Test_Date,
       (select max(lot_id)
          from tb_mmif_pidinfo
         where shop = 'PCB'
           and Product_id = A.Product_Id)  As PCB_LOT_ID,
       (select max(created_date)
          from tb_mmif_pidinfo
         where shop = 'PCB'
           and Product_id = A.Product_Id) As PCB_LOT_COMBINE,
       (select max(created_date)
          from tb_mmif_txnhistory
         where lot_Id in (select max(lot_id)
                            from tb_mmif_pidinfo
                           where shop = 'PCB'
                             and Product_id = A.Product_Id)
           and account = '204') As LG_Receiving,
       (select max(created_date)
          from tb_mmif_fnlinputhistory
         where product_id = A.product_id
           and return_flag = 'N') As FNL_INPUT,
       (Select max(created_date)
          from tb_qlty_oqclotrslt
         where oqclotid = C.Pallet_Id
           and test_status in ('C', 'U', 'P', 'Q', 'E')) As PACK_OQC_Date
  from tb_side_idinfo A,tb_mmif_esn C
Where a.product_id = c.product_id
  and a.created_date between to_date('2011-04-08 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
                          and to_date('2011-04-14 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
   and a.site ='CX'
) z,
cjmesmgr.tbl_prod_master k,
tb_mstr_workorder tmw
where z.product_id=k.prod_no
And tmw.work_order=z.work_order
And tmw.model ='GS290'  -->这里写型号

对这段SQL解释计划执行的结果如下:

SELECT STATEMENT, GOAL = FIRST_ROWS                        2277110209        2        312
UNION-ALL                                       
  FILTER                                       
   TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_MMIF_ESN        4        1        31
    NESTED LOOPS                        176000        1        181
     NESTED LOOPS                        175996        1        150
      NESTED LOOPS                        175994        1        118
       TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_SIDE_IDINFO        175990        1        29
        BITMAP CONVERSION TO ROWIDS                                       
         BITMAP AND                                       
          BITMAP CONVERSION FROM ROWIDS                                       
           INDEX RANGE SCAN        CJMESMGR        IX_TB_SIDE_IDINFO02        21527        2519174       
          BITMAP CONVERSION FROM ROWIDS                                       
           SORT ORDER BY                                       
            INDEX RANGE SCAN        CJMESMGR        IX_TB_SIDE_IDINFO03        6759        2519174       
       REMOTE                TBG_PROD_MASTER        4        1        89
      TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_MSTR_WORKORDER        2        1        32
       INDEX UNIQUE SCAN        CJMESMGR        PK_TB_MSTR_WORKORDER        1        1       
        SORT AGGREGATE                                1        36
         TABLE ACCESS FULL        CJMESMGR        TB_SIDE_BCRHISTORY        3090        1        36
     INDEX RANGE SCAN        CJMESMGR        IX_TB_MMIF_ESN05        3        1       
  TABLE ACCESS BY INDEX ROWID        CJMESMGR        TBL_PROD_MASTER        4        1        39
   NESTED LOOPS                        129        1        131
    NESTED LOOPS                        125        1        92
     NESTED LOOPS                        121        1        61
      TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_SIDE_IDINFO        39        41        1189
       INDEX RANGE SCAN        CJMESMGR        IX_TB_SIDE_IDINFO03        3        198       
      TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_MSTR_WORKORDER        2        1        32
       INDEX UNIQUE SCAN        CJMESMGR        PK_TB_MSTR_WORKORDER        1        1       
        SORT AGGREGATE                                1        36
         TABLE ACCESS FULL        CJMESMGR        TB_SIDE_BCRHISTORY        3090        1        36
     TABLE ACCESS BY INDEX ROWID        CJMESMGR        TB_MMIF_ESN        4        1        31
      INDEX RANGE SCAN        CJMESMGR        IX_TB_MMIF_ESN05        3        1       
    INDEX RANGE SCAN        CJMESMGR        IX_TBL_PROD_MASTER_24        3        1       

该怎么优化,那个地方写的有问题,才导致查询速度非常慢啊!
认证徽章
论坛徽章:
41
ITPUB季度 技术新星
日期:2012-05-22 15:10:11祖母绿
日期:2013-09-13 21:16:10蓝锆石
日期:2013-09-13 21:15:34海蓝宝石
日期:2013-09-13 21:13:45最佳人气徽章
日期:2012-03-13 17:39:18优秀写手
日期:2013-12-18 09:29:11ITPUB社区12周年站庆徽章
日期:2013-10-17 13:56:592013年新春福章
日期:2013-02-25 14:51:24玉石琵琶
日期:2012-02-21 15:04:382011新春纪念徽章
日期:2011-02-18 11:43:35
发表于 2011-4-21 18:55 | 显示全部楼层
NESTED LOOPS                        176000        1        181
     NESTED LOOPS                        175996        1        150
      NESTED LOOPS                        175994        1        118
使用hint或者使用两个表相交,两个表相交,总之让其连接使用hash试试看

使用道具 举报

回复
论坛徽章:
8
数据库板块每日发贴之星
日期:2009-06-12 01:01:02数据库板块每日发贴之星
日期:2009-06-21 01:01:01ITPUB9周年纪念徽章
日期:2010-10-08 09:32:272010广州亚运会纪念徽章:游泳
日期:2010-11-12 16:42:092011新春纪念徽章
日期:2011-02-18 11:42:502010广州亚运会纪念徽章:三项全能
日期:2011-02-26 13:07:50咸鸭蛋
日期:2011-08-30 15:51:05ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22
发表于 2011-4-21 21:34 | 显示全部楼层
这几个nested loop很猛啊,都是10w以上的记录,调整一下diring table,或者连接方式,hash join

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表