查看: 2125|回复: 5

此SQL还有优化的余地吗?

[复制链接]
论坛徽章:
8
蜘蛛蛋
日期:2011-07-14 17:45:18紫蛋头
日期:2011-10-21 14:16:35迷宫蛋
日期:2011-11-01 11:23:30ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26灰彻蛋
日期:2011-12-17 14:46:392012新春纪念徽章
日期:2012-01-04 11:53:29蜘蛛蛋
日期:2012-02-28 11:39:462013年新春福章
日期:2013-02-25 14:51:24
发表于 2011-9-27 14:59 | 显示全部楼层 |阅读模式
select
t1.region_id,
t1.region_name,
t1.system_name,
t1.vendor_name,
t1.agg_flag,
t1.block_flag,
t1.block_name,
t1.int_id,
t1.name,
t1.zh_name,
t1.related_bsc,
t1.bsc_name,
t1.status,
t1.status_name,
t1.lac_ci,
t1.sum_block_num,
t1.sum_7,
t1.sum_30,
t1.min_first_time,
t1.max_last_time,
nvl(t2.status,'未处理') nop_status
from
(SELECT
    f.region_id,
    f.region_name,
    f.system_name ,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    b.block_name,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    s.status_name,
    TO_CHAR(c.lac)||'_'||TO_CHAR(c.ci) lac_ci,
    SUM(nvl(f.block_num_0,0)+nvl(f.block_num_1,0)) sum_block_num,
    t.sum_7,
    tt.sum_30,
    MIN(f.first_time) min_first_time,
    MAX(f.last_time) max_last_time
FROM
    sts_cell_block_fof f,
    res_cell c,
    nop_sys_block b,
    nop_sys_status s,
    (
SELECT
    f.region_id,
    f.system_name,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    b.block_name,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    s.status_name,
    SUM(nvl(f.block_num_0,0)+nvl(f.block_num_1,0)) sum_7
FROM
    sts_cell_block_fof f,
    res_cell c,
    nop_sys_block b,
    nop_sys_status s
where
    f.int_id = c.int_id
    and b.block_id = f.block_flag
    and s.status_id = f.status
    and f.scan_time between to_date('2011-07-09','yyyy-mm-dd')-7 and to_date('2011-07-09','yyyy-mm-dd')
GROUP BY
    f.region_id,
    f.region_name,
    f.system_id,
    f.system_name,
    f.vendor_id,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    c.lac,
    c.ci,
    b.block_name,
    s.status_name
) t,
    (
SELECT
    f.region_id,
    f.system_name,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    b.block_name,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    s.status_name,
    SUM(nvl(f.block_num_0,0)+nvl(f.block_num_1,0)) sum_30
FROM
    sts_cell_block_fof f,
    res_cell c,
    nop_sys_block b,
    nop_sys_status s
where
    f.int_id = c.int_id
    and b.block_id = f.block_flag
    and s.status_id = f.status
    and f.scan_time between to_date('2011-07-09','yyyy-mm-dd')-30 and to_date('2011-07-09','yyyy-mm-dd')
GROUP BY
    f.region_id,
    f.region_name,
    f.system_id,
    f.system_name,
    f.vendor_id,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    c.lac,
    c.ci,
    b.block_name,
    s.status_name
) tt
where
    f.int_id = c.int_id
    and b.block_id = f.block_flag
    and s.status_id = f.status
    and t.region_id=f.region_id
    and t.system_name = f.system_name
    and t.vendor_name = f.vendor_name
    and t.agg_flag = f.agg_flag
    and t.block_flag = f.block_flag
    and t.block_name = b.block_name
    and t.int_id = f.int_id
    and t.name = f.name
    and t.zh_name = f.zh_name
    and t.related_bsc = f.related_bsc
    and t.bsc_name = f.bsc_name
    and t.status = f.status
    and t.status_name = s.status_name
    and tt.region_id=f.region_id
    and tt.system_name = f.system_name
    and tt.vendor_name = f.vendor_name
    and tt.agg_flag = f.agg_flag
    and tt.block_flag = f.block_flag
    and tt.block_name = b.block_name
    and tt.int_id = f.int_id
    and tt.name = f.name
    and tt.zh_name = f.zh_name
    and tt.related_bsc = f.related_bsc
    and tt.bsc_name = f.bsc_name
    and tt.status = f.status
    and tt.status_name = s.status_name
GROUP BY
    f.region_id,
    f.region_name,
    f.system_id,
    f.system_name,
    f.vendor_id,
    f.vendor_name,
    f.agg_flag,
    f.block_flag,
    f.int_id,
    f.name,
    f.zh_name,
    f.related_bsc,
    f.bsc_name,
    f.status,
    c.lac,
    c.ci,
    b.block_name,
    s.status_name,
    t.sum_7,
    tt.sum_30
) t1,
(select description,status from nop_wf_flowinstance where ordernum like 'ZCXQ%') t2
where t1.int_id=t2.description(+)
order by t1.max_last_time desc;
end;
/

论坛徽章:
8
蜘蛛蛋
日期:2011-07-14 17:45:18紫蛋头
日期:2011-10-21 14:16:35迷宫蛋
日期:2011-11-01 11:23:30ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26灰彻蛋
日期:2011-12-17 14:46:392012新春纪念徽章
日期:2012-01-04 11:53:29蜘蛛蛋
日期:2012-02-28 11:39:462013年新春福章
日期:2013-02-25 14:51:24
 楼主| 发表于 2011-9-27 15:40 | 显示全部楼层
本帖最后由 yang_s_h_u_o 于 2011-9-27 15:42 编辑

大侠们,出手吧

执行计划如下:

SELECT STATEMENT, GOAL = ALL_ROWS   9112 256 134912
SORT ORDER BY   9112 256 134912
  HASH JOIN RIGHT OUTER   9111 256 134912
   TABLE ACCESS FULL IPMS NOP_WF_FLOWINSTANCE 3 1 60
   VIEW IPMS  9107 256 119552
    HASH GROUP BY   9107 256 100352
     NESTED LOOPS     
      NESTED LOOPS   9106 256 100352
       HASH JOIN   8850 256 95744
        HASH JOIN   4316 2402 619716
         TABLE ACCESS FULL IPMS NOP_SYS_BLOCK 3 3 48
         HASH JOIN   4312 7205 1743610
          TABLE ACCESS FULL IPMS NOP_SYS_STATUS 3 3 39
          HASH JOIN   4308 22512 5155248
           VIEW IPMS  3629 22512 2611392
            HASH GROUP BY   3629 22512 3421824
             HASH JOIN   2867 22512 3421824
              TABLE ACCESS FULL IPMS NOP_SYS_BLOCK 3 3 48
              HASH JOIN   2864 22512 3061632
               TABLE ACCESS FULL IPMS NOP_SYS_STATUS 3 3 39
               HASH JOIN   2860 23448 2884104
                TABLE ACCESS FULL IPMS STS_CELL_BLOCK_FOF 249 23448 2462040
                TABLE ACCESS FULL IPMS RES_CELL 2305 122134 2198412
           TABLE ACCESS FULL IPMS STS_CELL_BLOCK_FOF 249 49280 5568640
        VIEW IPMS  4534 45391 5265356
         HASH GROUP BY   4534 45391 6899432
          HASH JOIN   3001 45391 6899432
           TABLE ACCESS FULL IPMS NOP_SYS_BLOCK 3 3 48
           HASH JOIN   2997 45391 6173176
            TABLE ACCESS FULL IPMS NOP_SYS_STATUS 3 3 39
            HASH JOIN   2993 47277 5815071
             TABLE ACCESS FULL IPMS RES_CELL 2305 122134 2198412
             TABLE ACCESS FULL IPMS STS_CELL_BLOCK_FOF 250 47277 4964085
       INDEX UNIQUE SCAN IPMS IDX_CELL 0 1
      TABLE ACCESS BY INDEX ROWID IPMS RES_CELL 1 1 18

使用道具 举报

回复
论坛徽章:
5
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51数据库板块每日发贴之星
日期:2011-07-22 01:01:02蜘蛛蛋
日期:2011-08-24 14:10:13ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26
发表于 2011-9-27 16:21 | 显示全部楼层
给的信息太少了。

使用道具 举报

回复
论坛徽章:
6
2011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB官方微博粉丝徽章
日期:2011-06-29 17:05:18ITPUB十周年纪念徽章
日期:2011-11-01 16:25:51紫蛋头
日期:2011-12-23 13:01:312012新春纪念徽章
日期:2012-01-04 11:56:44马自达
日期:2013-10-07 18:22:51
发表于 2011-9-27 17:17 | 显示全部楼层
你还是去看应用需求重写SQL吧,那么多的重复。要命啊

使用道具 举报

回复
招聘 : SAP实施
论坛徽章:
9
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010新春纪念徽章
日期:2010-03-01 11:20:53SQL大赛参与纪念
日期:2011-04-13 12:08:17ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44茶鸡蛋
日期:2012-02-29 11:04:04鲜花蛋
日期:2012-03-13 13:54:13蛋疼蛋
日期:2012-05-28 16:48:46
发表于 2011-9-27 22:49 | 显示全部楼层
t的查询应该可以合并到tt的查询语句中,tt是30天内的统计数据,直接根据日期写一个表达式就可以汇总出7天内的统计数据。
这样做语义上稍微有点不同,可以在最后再删除掉7天内统计值为0的行。

使用道具 举报

回复
论坛徽章:
8
蜘蛛蛋
日期:2011-07-14 17:45:18紫蛋头
日期:2011-10-21 14:16:35迷宫蛋
日期:2011-11-01 11:23:30ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26灰彻蛋
日期:2011-12-17 14:46:392012新春纪念徽章
日期:2012-01-04 11:53:29蜘蛛蛋
日期:2012-02-28 11:39:462013年新春福章
日期:2013-02-25 14:51:24
 楼主| 发表于 2011-9-28 09:26 | 显示全部楼层
ai2ming 发表于 2011-9-27 22:49
t的查询应该可以合并到tt的查询语句中,tt是30天内的统计数据,直接根据日期写一个表达式就可以汇总出7天内 ...

谢谢,我也这么改过,但结果和原始的sql不同了

使用道具 举报

回复

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

本版积分规则 发表回复

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号
  
快速回复 返回顶部 返回列表