查看: 2559|回复: 7

[PL/SQL] 帮忙优化sql

[复制链接]
论坛徽章:
13
生肖徽章2007版:蛇
日期:2009-09-29 15:44:15ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152010年世界杯参赛球队:日本
日期:2010-05-04 17:51:192010年世界杯参赛球队:南非
日期:2010-04-28 10:07:122010年世界杯参赛球队:希腊
日期:2010-04-23 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:342010年世界杯参赛球队:科特迪瓦
日期:2010-01-27 14:47:432010年世界杯参赛球队:意大利
日期:2010-01-25 08:58:012010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:鼠
日期:2009-11-10 11:54:09
发表于 2010-4-7 16:33 | 显示全部楼层 |阅读模式
PRMAIND_DBA@DPRDT > select count(*) from BOL_CONTR_LINK;

  COUNT(*)
----------
   4660200


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

PRMAIND_DBA@DPRDT > select count(*) from CONTAINERS;

  COUNT(*)
----------
    313086




PRMAIND_DBA@DPRDT > select count(*) from BOL;

  COUNT(*)
----------
   2542230






PRMAIND_DBA@DPRDT >       SELECT    c.agent_code,
  2            c.ROTN,
  3            a.BOL_NO,
  4            a.CONTR_NO,
  5            b.CONTR_LEN AS CONTR_SIZE,
  6            a.ISO_TYPE,
  7            a.CTMS_LINE_CODE AS LINE_CODE
  8        FROM BOL_CONTR_LINK a,
  9             CONTAINERS b,
10             BOL c
11        WHERE
12            a.CONTR_NO = b.CONTR_NO
13            AND a.BOL_NO = c.BOL_NO
14            AND a.ROTN = c.ROTN
15            And c.rotn = 603271
16            AND a.bol_unique_ind  = c.bol_unique_ind
17            AND a.bol_split = c.bol_split
18            AND (b.CONTR_CAT = 'I' OR b.CONTR_CAT = 'E')
19            AND c.del_ind is null
20            AND a.del_ind is null
21            and c.agent_code ='A012'
22             AND NOT EXISTS(SELECT 1 FROM PR_SMART_STACKING_DTL d WHERE d.CONTR_NO = a.CONTR_NO)
23        ORDER BY c.agent_code,c.rotn DESC;



Execution Plan
----------------------------------------------------------
Plan hash value: 1154453300

-----------------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                       |     1 |   100 | 20313   (2)| 00:04:04 |
|*  1 |  TABLE ACCESS BY INDEX ROWID      | CONTAINERS            |     1 |    16 |     3   (0)| 00:00:01 |
|   2 |   NESTED LOOPS                    |                       |     1 |   100 | 20313   (2)| 00:04:04 |
|   3 |    NESTED LOOPS                   |                       |     1 |    84 | 20310   (2)| 00:04:04 |
|*  4 |     HASH JOIN RIGHT ANTI          |                       |  1041 | 56214 | 18789   (2)| 00:03:46 |
|   5 |      TABLE ACCESS FULL            | PR_SMART_STACKING_DTL |    25 |   275 |     3   (0)| 00:00:01 |
|*  6 |      MAT_VIEW ACCESS FULL         | MV_BOL_CONTR_LINK     |  1066 | 45838 | 18786   (2)| 00:03:46 |
|*  7 |     MAT_VIEW ACCESS BY INDEX ROWID| MV_BOL                |     1 |    30 |     2   (0)| 00:00:01 |
|*  8 |      INDEX UNIQUE SCAN            | PK_BOL_01             |     1 |       |     1   (0)| 00:00:01 |
|*  9 |    INDEX RANGE SCAN               | U_CONTAINERS_1        |     1 |       |     2   (0)| 00:00:01 |
-----------------------------------------------------------------------------------------------------------

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

   1 - filter("B"."CONTR_CAT"='E' OR "B"."CONTR_CAT"='I')
   4 - access("D"."CONTR_NO"="A"."CONTR_NO")
   6 - filter("A"."ROTN"=603271 AND "A"."DEL_IND" IS NULL)
   7 - filter("C"."AGENT_CODE"='A012' AND "C"."DEL_IND" IS NULL)
   8 - access("A"."BOL_NO"="C"."BOL_NO" AND "C"."ROTN"=603271 AND
              "A"."BOL_UNIQUE_IND"="C"."BOL_UNIQUE_IND" AND "A"."BOL_SPLIT"="C"."BOL_SPLIT")
   9 - access("A"."CONTR_NO"="B"."CONTR_NO")

PRMAIND_DBA@DPRDT >

这个查询不加索引有没有优化的空间
招聘 : 数据库管理员
论坛徽章:
9
生肖徽章2007版:牛
日期:2009-03-10 21:26:492010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:葡萄牙
日期:2010-02-22 14:35:242010新春纪念徽章
日期:2010-03-01 11:19:092010广州亚运会纪念徽章:射击
日期:2010-09-08 23:42:12ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212010广州亚运会纪念徽章:拳击
日期:2010-10-30 00:46:582011新春纪念徽章
日期:2011-02-18 11:43:322011新春纪念徽章
日期:2011-03-01 08:49:39
发表于 2010-4-7 16:44 | 显示全部楼层
功力不足,呼唤棉花糖老大。

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2010-4-7 16:51 | 显示全部楼层
|*  6 |      MAT_VIEW ACCESS FULL         | MV_BOL_CONTR_LINK     |  1066 | 45838 | 18786   (2)| 00:03:46 |

还是物化视图。。。想办法解决这一部

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2010-4-7 16:52 | 显示全部楼层
对物化视图还不了解 如果是表 可以根据条件
6 - filter("A"."ROTN"=603271 AND "A"."DEL_IND" IS NULL)
来建立相应的索引。

使用道具 举报

回复
论坛徽章:
13
生肖徽章2007版:蛇
日期:2009-09-29 15:44:15ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152010年世界杯参赛球队:日本
日期:2010-05-04 17:51:192010年世界杯参赛球队:南非
日期:2010-04-28 10:07:122010年世界杯参赛球队:希腊
日期:2010-04-23 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:342010年世界杯参赛球队:科特迪瓦
日期:2010-01-27 14:47:432010年世界杯参赛球队:意大利
日期:2010-01-25 08:58:012010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:鼠
日期:2009-11-10 11:54:09
 楼主| 发表于 2010-4-7 16:59 | 显示全部楼层

回复 #4 gaopengtttt 的帖子

谢谢,物化试图也可以创建索引,现在我们没有这个权限,需要和客户沟通...

确实这一步的cost比较大

使用道具 举报

回复
论坛徽章:
13
生肖徽章2007版:蛇
日期:2009-09-29 15:44:15ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152010年世界杯参赛球队:日本
日期:2010-05-04 17:51:192010年世界杯参赛球队:南非
日期:2010-04-28 10:07:122010年世界杯参赛球队:希腊
日期:2010-04-23 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:342010年世界杯参赛球队:科特迪瓦
日期:2010-01-27 14:47:432010年世界杯参赛球队:意大利
日期:2010-01-25 08:58:012010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:鼠
日期:2009-11-10 11:54:09
 楼主| 发表于 2010-4-7 17:03 | 显示全部楼层
filter("A"."ROTN"=603271 AND "A"."DEL_IND" IS NULL)

"A"."DEL_IND" IS NULL 这样的列应该怎么建索引

使用道具 举报

回复
认证徽章
论坛徽章:
9
ITPUB社区OCM联盟徽章
日期:2013-03-27 11:17:11奥运纪念徽章
日期:2013-06-18 09:13:52ITPUB社区千里马徽章
日期:2013-08-22 09:58:03大众
日期:2013-08-30 14:51:33路虎
日期:2013-12-01 18:25:42
发表于 2010-4-7 17:05 | 显示全部楼层
你看看时间嘛 都耗在上面了。。你在测试环境自己测试下估计建立一个联合索引是可以的、

使用道具 举报

回复
论坛徽章:
13
生肖徽章2007版:蛇
日期:2009-09-29 15:44:15ITPUB十周年纪念徽章
日期:2011-11-01 16:21:152010年世界杯参赛球队:日本
日期:2010-05-04 17:51:192010年世界杯参赛球队:南非
日期:2010-04-28 10:07:122010年世界杯参赛球队:希腊
日期:2010-04-23 16:19:412010新春纪念徽章
日期:2010-03-01 11:08:342010年世界杯参赛球队:科特迪瓦
日期:2010-01-27 14:47:432010年世界杯参赛球队:意大利
日期:2010-01-25 08:58:012010新春纪念徽章
日期:2010-01-04 08:33:08生肖徽章2007版:鼠
日期:2009-11-10 11:54:09
 楼主| 发表于 2010-4-7 17:45 | 显示全部楼层
建了一个索引,搞定了.
create index MV_BOL_CONTR_LINK_ind0 on MV_BOL_CONTR_LINK(ROTN,NVL(DEL_IND,'N');

PRMAIND_DBA@DPRDT > SELECT    c.agent_code,
  2            c.ROTN,
  3            a.BOL_NO,
  4            a.CONTR_NO,
  5            b.CONTR_LEN AS CONTR_SIZE,
  6            a.ISO_TYPE,
  7            a.CTMS_LINE_CODE AS LINE_CODE
  8        FROM BOL_CONTR_LINK a,
  9             CONTAINERS b,
10             BOL c
11        WHERE
12            a.CONTR_NO = b.CONTR_NO
13            AND a.BOL_NO = c.BOL_NO
14            AND a.ROTN = c.ROTN
15            And c.rotn = 603271
16            AND a.bol_unique_ind  = c.bol_unique_ind
17            AND a.bol_split = c.bol_split
18            AND (b.CONTR_CAT = 'I' OR b.CONTR_CAT = 'E')
19            AND NVL(c.del_ind,'N') ='N'
20            AND NVL(a.del_ind,'N') ='N'
21            and c.agent_code ='A012'
22             AND NOT EXISTS(SELECT 1 FROM PR_SMART_STACKING_DTL d WHERE d.CONTR_NO = a.CONTR_NO)
23        ORDER BY c.agent_code,c.rotn DESC;

Execution Plan
----------------------------------------------------------
Plan hash value: 2042501622

-------------------------------------------------------------------------------------------------------------
| Id  | Operation                          | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                   |                        |     1 |   100 |    77   (2)| 00:00:01 |
|*  1 |  TABLE ACCESS BY INDEX ROWID       | CONTAINERS             |     1 |    16 |     3   (0)| 00:00:01 |
|   2 |   NESTED LOOPS                     |                        |     1 |   100 |    77   (2)| 00:00:01 |
|   3 |    NESTED LOOPS                    |                        |     1 |    84 |    74   (2)| 00:00:01 |
|*  4 |     HASH JOIN ANTI                 |                        |     5 |   270 |    67   (2)| 00:00:01 |
|   5 |      MAT_VIEW ACCESS BY INDEX ROWID| MV_BOL_CONTR_LINK      |    11 |   473 |    63   (0)| 00:00:01 |
|*  6 |       INDEX RANGE SCAN             | MV_BOL_CONTR_LINK_IND0 |   357 |       |     3   (0)| 00:00:01 |
|   7 |      TABLE ACCESS FULL             | PR_SMART_STACKING_DTL  |    25 |   275 |     3   (0)| 00:00:01 |
|*  8 |     MAT_VIEW ACCESS BY INDEX ROWID | MV_BOL                 |     1 |    30 |     2   (0)| 00:00:01 |
|*  9 |      INDEX UNIQUE SCAN             | PK_BOL_01              |     1 |       |     1   (0)| 00:00:01 |
|* 10 |    INDEX RANGE SCAN                | U_CONTAINERS_1         |     1 |       |     2   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------

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

   1 - filter("B"."CONTR_CAT"='E' OR "B"."CONTR_CAT"='I')
   4 - access("D"."CONTR_NO"="A"."CONTR_NO")
   6 - access("A"."ROTN"=603271 AND NVL("DEL_IND",'N')='N')
   8 - filter("C"."AGENT_CODE"='A012' AND NVL("C"."DEL_IND",'N')='N')
   9 - access("A"."BOL_NO"="C"."BOL_NO" AND "C"."ROTN"=603271 AND
              "A"."BOL_UNIQUE_IND"="C"."BOL_UNIQUE_IND" AND "A"."BOL_SPLIT"="C"."BOL_SPLIT")
  10 - access("A"."CONTR_NO"="B"."CONTR_NO")

使用道具 举报

回复

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

本版积分规则 发表回复

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