查看: 14125|回复: 17

[SQL] 【讨论】这个执行语句还可以怎么优化啊,需要改什么关联

[复制链接]
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
发表于 2014-9-4 17:27 | 显示全部楼层 |阅读模式
Plan hash value: 2820634403

------------------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                         | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                              |     1 |  5601 |    12  (25)| 00:00:01 |
|   1 |  SORT AGGREGATE                   |                              |     1 |    26 |            |          |
|   2 |   TABLE ACCESS BY INDEX ROWID     | ETS_RISK_CURRENCY_BALANCE_T  |     1 |    26 |     1   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN               | ETS_RISK_CURRENCY_BALANCE_N1 |     1 |       |     1   (0)| 00:00:01 |
|   4 |  SORT ORDER BY                    |                              |     1 |  5601 |    12  (25)| 00:00:01 |
|   5 |   NESTED LOOPS                    |                              |     1 |  5601 |    11  (19)| 00:00:01 |
|   6 |    NESTED LOOPS                   |                              |     1 |  5582 |    10  (20)| 00:00:01 |
|   7 |     NESTED LOOPS                  |                              |     1 |  5552 |     9  (23)| 00:00:01 |
|*  8 |      HASH JOIN                    |                              |     1 |  5490 |     8  (25)| 00:00:01 |
|*  9 |       TABLE ACCESS BY INDEX ROWID | TPL_LOOKUP_ITEM_T            |     1 |    62 |     2   (0)| 00:00:01 |
|* 10 |        INDEX RANGE SCAN           | TPL_LOOKUP_ITEM_N1           |     8 |       |     1   (0)| 00:00:01 |
|  11 |       MERGE JOIN OUTER            |                              |    20 |   106K|     5  (20)| 00:00:01 |
|* 12 |        TABLE ACCESS BY INDEX ROWID| ETS_RISK_EXCHANGE_INFO_T     |    20 |   104K|     1   (0)| 00:00:01 |
|  13 |         INDEX FULL SCAN           | PK_RISK_EXCHANGE_INFO        |    36 |       |     1   (0)| 00:00:01 |
|* 14 |        SORT JOIN                  |                              |     1 |    54 |     4  (25)| 00:00:01 |
|* 15 |         TABLE ACCESS FULL         | ETS_RISK_PREMIUM_RATE_T      |     1 |    54 |     3   (0)| 00:00:01 |
|  16 |      TABLE ACCESS BY INDEX ROWID  | TPL_LOOKUP_ITEM_T            |     1 |    62 |     1   (0)| 00:00:01 |
|* 17 |       INDEX UNIQUE SCAN           | UQ_LOOKUP_ITEM               |     1 |       |     0   (0)| 00:00:01 |
|  18 |     TABLE ACCESS BY INDEX ROWID   | FINBAS_REGIONS_T             |     1 |    30 |     1   (0)| 00:00:01 |
|* 19 |      INDEX UNIQUE SCAN            | PK_FINBAS_REGIONS            |     1 |       |     0   (0)| 00:00:01 |
|  20 |    TABLE ACCESS BY INDEX ROWID    | FINBAS_TERRITORIES_T         |     1 |    19 |     1   (0)| 00:00:01 |
|* 21 |     INDEX UNIQUE SCAN             | PK_FINBAS_TERRITORIES        |     1 |       |     0   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("CB"."EXCHANGE_INFO_ID"=:B1)
   8 - access("LT2"."ITEM_CODE"=TO_CHAR("TD"."EXCHANGE_RATE_MECHANISM"))
   9 - filter("LT2"."APP_NAME"='etreasury' AND "LT2"."LANGUAGE"='en_US')
  10 - access("LT2"."CLASSIFY_CODE"='ETREASURY_RISK_EXCHANGE_RATE_MECHANISM')
  12 - filter("TD"."STATUS"=1)
  14 - access("TD"."EXCHANGE_INFO_ID"="RPRT"."EXCHANGE_INFO_ID"(+))
       filter("TD"."EXCHANGE_INFO_ID"="RPRT"."EXCHANGE_INFO_ID"(+))
  15 - filter("RPRT"."DELETE_FLAG"(+)=0)
  17 - access("LT1"."ITEM_CODE"=TO_CHAR("TD"."CURRENCY_CLASSIFICATION") AND "LT1"."LANGUAGE"='en_US' AND
              "LT1"."CLASSIFY_CODE"='ETREASURY_RISK_CLASSIFICATION' AND "LT1"."APP_NAME"='etreasury')
  19 - access("RT"."REGION_ID"="TD"."REGION_ID" AND "RT"."REGION_TYPE"=2)
  21 - access("CT"."COUNTRY_ID"="TD"."COUNTRY_ID")

Note
-----
   - dynamic sampling used for this statement (level=2)

论坛徽章:
86
生肖徽章2007版:牛
日期:2012-08-02 22:43:00紫蛋头
日期:2012-12-08 09:43:38鲜花蛋
日期:2012-11-17 12:02:07鲜花蛋
日期:2013-02-05 21:53:34复活蛋
日期:2012-11-17 12:02:07SQL极客
日期:2013-12-09 14:13:35SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:10:50ITPUB季度 技术新星
日期:2012-11-27 10:16:10最佳人气徽章
日期:2013-03-19 17:24:25
发表于 2014-9-4 17:54 | 显示全部楼层
新花样啊,只有执行计划,分析sql语句。
ETS_RISK_PREMIUM_RATE_T这表只有一条数据?
select count(*) from ETS_RISK_EXCHANGE_INFO_T where "STATUS"=1多少条?

使用道具 举报

回复
论坛徽章:
404
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-9-4 21:29 | 显示全部楼层
执行多长时间满意

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-9-4 22:10 | 显示全部楼层
考考你们谁能把这个计划的SQL写出来?

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2014-9-4 23:15 | 显示全部楼层
统计信息不准确,SQL不知道,各数据分布不知道,没有真实的统计信息,无法判断

使用道具 举报

回复
论坛徽章:
7
优秀写手
日期:2013-12-18 09:29:08问答徽章
日期:2014-02-07 23:48:392014年新春福章
日期:2014-02-18 16:50:09马上有车
日期:2014-02-18 16:50:09马上有钱
日期:2014-10-26 21:51:11暖羊羊
日期:2015-03-04 14:54:572015年新春福章
日期:2015-03-06 11:59:47
发表于 2014-9-5 00:43 | 显示全部楼层
newkid 发表于 2014-9-4 22:10
考考你们谁能把这个计划的SQL写出来?

版主:把predicate information下面的信息全都放where条件里是否就是对应sql?没这么简单吧.

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-9-5 02:38 | 显示全部楼层
当然没那么简单,你看到的计划可能是经过CBO变型的。而且你也不知道SELECT哪些列,GROUP BY哪些列(如果有GROUP BY的话)。
所以这就相当于有人把编译过的机器代码给你看,然后问你要怎么改进?
更何况楼主还没贴全,估计是用鼠标在SQLPLUS上一划拉,右边的几列都没划到。
还原出来就是差不多这样:
SELECT ......
FROM TPL_LOOKUP_ITEM_T LT2
    ,ETS_RISK_EXCHANGE_INFO_T TD
    ,ETS_RISK_PREMIUM_RATE_T RPRT
    ,TPL_LOOKUP_ITEM_T LT1
    ,FINBAS_REGIONS_T RT
    ,FINBAS_TERRITORIES_T CT
WHERE LT2.CLASSIFY_CODE='ETREASURY_RISK_EXCHANGE_RATE_MECHANISM'
      AND LT2.APP_NAME='etreasury' AND LT2.LANGUAGE='en_US'
      AND LT2.ITEM_CODE=TO_CHAR(TD.EXCHANGE_RATE_MECHANISM)
      AND TD.STATUS=1
      AND TD.EXCHANGE_INFO_ID=RPRT.EXCHANGE_INFO_ID(+)
      AND RPRT.DELETE_FLAG(+)=0
      AND LT1.ITEM_CODE=TO_CHAR(TD.CURRENCY_CLASSIFICATION) AND LT1 ------ 漏掉了
          AND LT1.CLASSIFY_CODE='ETREASURY_RISK_CLASSIFICATION' AND LT1
      AND RT.REGION_ID=TD.REGION_ID AND RT.REGION_TYPE=2
      AND CT.COUNTRY_ID=TD.COUNTRY_ID

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
 楼主| 发表于 2014-9-5 09:24 | 显示全部楼层
newkid 发表于 2014-9-5 02:38
当然没那么简单,你看到的计划可能是经过CBO变型的。而且你也不知道SELECT哪些列,GROUP BY哪些列(如果有GR ...

好吧   你们吧我的语句都发出来了
FROM ets_risk_exchange_info_t    td,
       ets_risk_premium_rate_t     rprt,
       finbas.finbas_regions_t     rt,
       finbas.finbas_territories_t ct,
       tpl_lookup_item_t           lt1,
       tpl_lookup_item_t           lt2
WHERE td.exchange_info_id = rprt.exchange_info_id(+)
       AND rprt.delete_flag(+) = 0
       AND lt1.item_code = to_char(td.currency_classification)
       AND lt1.language = 'en_US'
       AND lt1.app_name = 'etreasury'
       AND lt1.classify_code = 'ETREASURY_RISK_CLASSIFICATION'
       AND lt2.item_code = to_char(td.exchange_rate_mechanism)
       AND lt2.app_name = 'etreasury'
       AND lt2.language = 'en_US'
       AND lt2.classify_code = 'ETREASURY_RISK_EXCHANGE_RATE_MECHANISM'
       AND ct.country_id = td.country_id
       AND rt.region_id = td.region_id
       AND td.status = 1
       AND rt.region_type = 2
ORDER BY td.exchange_info_id DESC;

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
 楼主| 发表于 2014-9-5 09:27 | 显示全部楼层
udfrog 发表于 2014-9-4 17:54
新花样啊,只有执行计划,分析sql语句。
ETS_RISK_PREMIUM_RATE_T这表只有一条数据?
select count(*) fr ...

不多啊   才几十条,from后面几张表都不大,有两张获取发票金额的表比较大

使用道具 举报

回复
求职 : 数据分析/ETL
论坛徽章:
16
鲜花蛋
日期:2014-08-09 15:15:33秀才
日期:2019-11-14 15:05:06秀才
日期:2019-11-14 15:03:23秀才
日期:2019-11-14 14:53:19秀才
日期:2019-11-14 14:44:34秀才
日期:2019-11-14 14:31:30目光如炬
日期:2018-07-01 22:00:00目光如炬
日期:2018-04-02 17:00:02火眼金睛
日期:2017-11-30 22:00:00火眼金睛
日期:2017-11-01 17:00:02
 楼主| 发表于 2014-9-5 09:33 | 显示全部楼层
〇〇 发表于 2014-9-4 21:29
执行多长时间满意

改到了2秒多,不知道能不能满足需求,因为主表业务数据不多,不知道用户能不能够接受

使用道具 举报

回复

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

本版积分规则 发表回复

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