查看: 18559|回复: 16

请教如何根据set autotrace traceonly得到的sql信息,来优化sql

[复制链接]
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
发表于 2009-9-7 11:54 | 显示全部楼层 |阅读模式
create index aaa on wwj.index_test(mo_number,serial_number);
set autotrace traceon

SQL> select * from wwj.index_test where serial_number='C78AGL40GY' and mo_number
='OWJW-811304';


执行计划
----------------------------------------------------------
Plan hash value: 2232210978

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

----------

| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)|
Time     |

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

----------

|   0 | SELECT STATEMENT            |            |     1 |   168 |     4   (0)|
00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| INDEX_TEST |     1 |   168 |     4   (0)|
00:00:01 |

|*  2 |   INDEX RANGE SCAN          | AAA        |     1 |       |     3   (0)|
00:00:01 |

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

----------


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

   2 - access("MO_NUMBER"='OWJW-811304' AND "SERIAL_NUMBER"='C78AGL40GY')


统计信息
----------------------------------------------------------
        237  recursive calls
          0  db block gets
         37  consistent gets
          0  physical reads
          0  redo size
       3408  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select * from wwj.index_test where mo_number='OWJW-811304' and serial_numbe
r='C78AGL40GY' ;


执行计划
----------------------------------------------------------
Plan hash value: 2232210978

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

----------

| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)|
Time     |

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

----------

|   0 | SELECT STATEMENT            |            |     1 |   168 |     4   (0)|
00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| INDEX_TEST |     1 |   168 |     4   (0)|
00:00:01 |

|*  2 |   INDEX RANGE SCAN          | AAA        |     1 |       |     3   (0)|
00:00:01 |

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

----------


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

   2 - access("MO_NUMBER"='OWJW-811304' AND "SERIAL_NUMBER"='C78AGL40GY')


统计信息
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          5  consistent gets
          0  physical reads
          0  redo size
       3408  bytes sent via SQL*Net to client
        385  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

要看哪些信息来判断选择哪个sql更好,这些信息都代表什么含义呢,如何来计算那个sql性能更好?
请诸位指点指点。
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
 楼主| 发表于 2009-9-7 11:55 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
 楼主| 发表于 2009-9-7 11:55 | 显示全部楼层
ding

使用道具 举报

回复
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
 楼主| 发表于 2009-9-7 13:50 | 显示全部楼层
up

使用道具 举报

回复
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
 楼主| 发表于 2009-9-7 13:50 | 显示全部楼层
up

使用道具 举报

回复
论坛徽章:
7
2010新春纪念徽章
日期:2010-03-01 11:06:282010年世界杯参赛球队:德国
日期:2010-03-02 13:45:37ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51Jeep
日期:2013-10-09 13:54:002014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
 楼主| 发表于 2009-9-7 13:50 | 显示全部楼层
up

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2009-9-7 13:58 | 显示全部楼层
第一次语句运行后的recursive calls和consistent gets数目比较大,比较大是因为这个语句使用了hard parse。
在此运行相同的语句时该语句使用了soft parse, 因此数目大大的下降了! 有关详细的内容看有关书吧!
还有你的这个语句没什么可优化的了, execution plan完全正确, 使用了index range scan!

[ 本帖最后由 bell6248 于 2009-9-7 14:02 编辑 ]

使用道具 举报

回复
论坛徽章:
31
数据库板块每日发贴之星
日期:2008-08-25 01:02:02数据库板块每日发贴之星
日期:2011-08-14 01:01:01茶鸡蛋
日期:2011-08-14 16:42:13ITPUB十周年纪念徽章
日期:2011-09-27 16:32:49ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26版主1段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19现任管理团队成员
日期:2012-10-18 17:10:24马上有车
日期:2014-02-19 11:55:14
发表于 2009-9-7 14:02 | 显示全部楼层
主要看operation列、rows、bytes列
比较执行计划的操作类型(索引扫描还是全表扫描等)

使用道具 举报

回复
招聘 : Java研发
认证徽章
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
发表于 2009-9-7 14:12 | 显示全部楼层
原帖由 bell6248 于 2009-9-7 13:58 发表
第一次语句运行后的recursive calls和consistent gets数目比较大,比较大是因为这个语句使用了hard parse。
在此运行相同的语句时该语句使用了soft parse, 因此数目大大的下降了! 有关详细的内容看有关书吧!
还有你的这个语句没什么可优化的了, execution plan完全正确, 使用了index range scan!

使用道具 举报

回复
论坛徽章:
120
现任管理团队成员
日期:2011-05-07 01:45:08乌索普
日期:2019-02-14 23:54:04
发表于 2009-9-7 14:15 | 显示全部楼层
lz这个问题面太大,涉及许多基础知识
,建议你看看effective oracle by design --thomas kytes这本书,这事儿一句两句将不清楚的

使用道具 举报

回复

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

本版积分规则 发表回复

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