查看: 1913|回复: 4

帮忙优化个语句

[复制链接]
论坛徽章:
112
技术图书徽章
日期:2017-07-03 09:38:11itpub13周年纪念徽章
日期:2014-09-30 11:02:00itpub13周年纪念徽章
日期:2014-09-28 10:55:552014年世界杯参赛球队: 比利时
日期:2014-06-23 10:15:51优秀写手
日期:2014-03-11 06:00:03马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02夏利
日期:2014-01-26 14:29:27雪铁龙
日期:2013-12-25 10:41:10林肯
日期:2013-11-08 09:17:14
发表于 2009-12-3 16:45 | 显示全部楼层 |阅读模式
这条语句N久不出结果
---------------------------------------------------------------------------------------------
| Id  | Operation                       | Name                 | Rows  | Bytes | Cost (%CPU)|
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                      |   139 | 23491 |   652K  (1)|
|   1 |  HASH GROUP BY                  |                      |   139 | 23491 |   652K  (1)|
|   2 |   FILTER                        |                      |       |       |            |
|   3 |    NESTED LOOPS                 |                      |   139 | 23491 |  9725   (1)|
|   4 |     NESTED LOOPS                |                      |   139 | 17653 |  9447   (1)|
|   5 |      TABLE ACCESS FULL          | TABCCALLLOGNEW       |   139 |  7367 |  9169   (1)|
|   6 |      TABLE ACCESS BY INDEX ROWID| OBJECTIVE            |     1 |    74 |     2   (0)|

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
---------------------------------------------
|   7 |       INDEX UNIQUE SCAN         | PK_OBJECTIVE         |     1 |       |     1   (0)|
|   8 |     TABLE ACCESS BY INDEX ROWID | CUSTOMER             |     1 |    42 |     2   (0)|
|   9 |      INDEX UNIQUE SCAN          | IDX_PK_CUSTOMER_GUID |     1 |       |     1   (0)|
|  10 |    NESTED LOOPS                 |                      |     1 |   196 |  9243   (1)|
|  11 |     NESTED LOOPS                |                      |    16 |  2192 |  9211   (1)|
|  12 |      FILTER                     |                      |       |       |            |
|  13 |       HASH JOIN RIGHT OUTER     |                      |    16 |  1008 |  9179   (1)|
|  14 |        TABLE ACCESS FULL        | TS_SUBRESOLUTION     |   101 |   707 |     3   (0)|
|  15 |        TABLE ACCESS FULL        | TABCCALLLOGNEW       |   134 |  7504 |  9176   (1)|
|  16 |      TABLE ACCESS BY INDEX ROWID| OBJECTIVE            |     1 |    74 |     2   (0)|
|  17 |       INDEX UNIQUE SCAN         | PK_OBJECTIVE         |     1 |       |     1   (0)|

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
---------------------------------------------
|  18 |     TABLE ACCESS BY INDEX ROWID | CUSTOMER             |     1 |    59 |     2   (0)|
|  19 |      INDEX UNIQUE SCAN          | IDX_PK_CUSTOMER_GUID |     1 |       |     1   (0)|
---------------------------------------------------------------------------------------------



select
case
   when cust.tel_2 is not null then
    cust.tel_2
   else
    log.relation_id
end as tel2,
max(log.createddate) as createdate
  from elite_ts.tabccalllognew log, ---------条件过滤后17948,这个表虽然有60多万数据,但是却300多M,大字段
       elite_ts.objective      evn,--------1451269
       elite_ts.customer       cust---------------1521169
----这三个表用hash提示也是特别慢
where log.relation_id = evn.objective_guid
   and cust.customer_guid = evn.customer_guid
   and not exists
(select *
          from v_performance_jp_call_collect tsvoice ------------一个视图,执行不到1分钟
         where (tsvoice.tel2 = cust.tel_2 or tsvoice.tel2 = log.relation_id)
           and tsvoice.createddate >= date
         '2009-11-01'
           and tsvoice.createddate < date '2009-11-26' + 1)
   and (log.outbound = 0 or log.outbound is null)
   and substr(log.logid, 1, 1) = 'T'
   and log.createddate >= date '2009-11-01'
   and log.createddate < date '2009-11-26' + 1
group by case
            when cust.tel_2 is not null then
             cust.tel_2
            else
             log.relation_id
          end
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2009-12-3 16:51 | 显示全部楼层
select
case
   when cust.tel_2 is not null then
    cust.tel_2
   else
    log.relation_id
end as tel2,
max(log.createddate) as createdate
  from elite_ts.tabccalllognew log, ---------条件过滤后17948,这个表虽然有60多万数据,但是却300多M,大字段
       elite_ts.objective      evn,--------1451269
       elite_ts.customer       cust---------------1521169
----这三个表用hash提示也是特别慢
where log.relation_id = evn.objective_guid
   and cust.customer_guid = evn.customer_guid
   and not exists
(select *
          from v_performance_jp_call_collect tsvoice ------------一个视图,执行不到1分钟
         where (tsvoice.tel2 = cust.tel_2)
           and tsvoice.createddate >= date
         '2009-11-01'
           and tsvoice.createddate < date '2009-11-26' + 1)
   and (log.outbound = 0 or log.outbound is null)
   and substr(log.logid, 1, 1) = 'T'
   and log.createddate >= date '2009-11-01'
   and log.createddate < date '2009-11-26' + 1
   and not exists
  (select *
          from v_performance_jp_call_collect tsvoice ------------一个视图,执行不到1分钟
         where (tsvoice.tel2 = log.relation_id)
           and tsvoice.createddate >= date
         '2009-11-01'
           and tsvoice.createddate < date '2009-11-26' + 1)
group by case
            when cust.tel_2 is not null then
             cust.tel_2
            else
             log.relation_id
          end

试试这个速度如何

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2010-12-06 19:50:26数据库板块每日发贴之星
日期:2011-09-03 01:01:01迷宫蛋
日期:2011-09-08 16:30:08ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18
发表于 2009-12-3 16:58 | 显示全部楼层
棉花兄在优化方面真是专家啊!
不过,您的个性签名有点看不懂,能解释一下吗?

使用道具 举报

回复
论坛徽章:
112
技术图书徽章
日期:2017-07-03 09:38:11itpub13周年纪念徽章
日期:2014-09-30 11:02:00itpub13周年纪念徽章
日期:2014-09-28 10:55:552014年世界杯参赛球队: 比利时
日期:2014-06-23 10:15:51优秀写手
日期:2014-03-11 06:00:03马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02夏利
日期:2014-01-26 14:29:27雪铁龙
日期:2013-12-25 10:41:10林肯
日期:2013-11-08 09:17:14
 楼主| 发表于 2009-12-3 17:07 | 显示全部楼层
原帖由 棉花糖ONE 于 2009-12-3 16:51 发表
select
case
   when cust.tel_2 is not null then
    cust.tel_2
   else
    log.relation_id
end as tel2,
max(log.createddate) as createdate
  from elite_ts.tabccalllognew log, ---------条件过滤后17948,这个表虽然有60多万数据,但是却300多M,大字段
       elite_ts.objective      evn,--------1451269
       elite_ts.customer       cust---------------1521169
----这三个表用hash提示也是特别慢
where log.relation_id = evn.objective_guid
   and cust.customer_guid = evn.customer_guid
   and not exists
(select *
          from v_performance_jp_call_collect tsvoice ------------一个视图,执行不到1分钟
         where (tsvoice.tel2 = cust.tel_2)
           and tsvoice.createddate >= date
         '2009-11-01'
           and tsvoice.createddate < date '2009-11-26' + 1)
   and (log.outbound = 0 or log.outbound is null)
   and substr(log.logid, 1, 1) = 'T'
   and log.createddate >= date '2009-11-01'
   and log.createddate < date '2009-11-26' + 1
   and not exists
  (select *
          from v_performance_jp_call_collect tsvoice ------------一个视图,执行不到1分钟
         where (tsvoice.tel2 = log.relation_id)
           and tsvoice.createddate >= date
         '2009-11-01'
           and tsvoice.createddate < date '2009-11-26' + 1)
group by case
            when cust.tel_2 is not null then
             cust.tel_2
            else
             log.relation_id
          end

试试这个速度如何


用了4分39秒
能讲讲原因吗?还有没有优化的余地?
谢谢

使用道具 举报

回复
论坛徽章:
0
发表于 2009-12-3 17:10 | 显示全部楼层
看不懂

使用道具 举报

回复

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

本版积分规则 发表回复

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