12
返回列表 发新帖
楼主: leon_0036

Oracle SQL 语句优化咨询

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2008-4-10 17:35 | 只看该作者

回复 #7 anlinew 的帖子

测试环境的执行计划是:
Operation        Object Name        Rows        Bytes        Cost        Object Node        In/Out        PStart        PStopSELECT STATEMENT Optimizer Mode=ALL_ROWS                22                   4.06232872984796   TABLE ACCESS BY INDEX ROWID        DSWEEP.WORK_ORDER        22          4 K        4.06232872984796                                                       
    INDEX RANGE SCAN        DSWEEP.TRIM_WO_UDA8_IDX        22                   1.01749853654618                                                       
正式环境的测试计划是:
Operation        Object Name        Rows        Bytes        Cost        Object Node        In/Out        PStart        PStopSELECT STATEMENT Optimizer Mode=ALL_ROWS                4 K                 128.767292330149   TABLE ACCESS FULL        DSWP175.WORK_ORDER        4 K        993 K        128.767292330149

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2008-4-11 15:34 | 只看该作者
顶一下,谢谢解答

使用道具 举报

回复
求职 : 数据库管理员
论坛徽章:
6
授权会员
日期:2007-08-23 08:30:28ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB元老
日期:2009-03-06 11:56:31ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB社区千里马徽章
日期:2013-08-22 09:58:03
13#
发表于 2008-4-11 16:09 | 只看该作者
selectivity 一个大于5%,一个小于5%吧

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2008-4-11 16:39 | 只看该作者

回复 #13 beiphiju 的帖子

主要是我两张表都建了Index,为什么测试的时候scan是按Index的,而正式的scan是按full table的???

使用道具 举报

回复
论坛徽章:
1
奥运会纪念徽章:沙滩排球
日期:2008-10-24 13:14:46
15#
发表于 2008-4-11 16:52 | 只看该作者
这是有可能的,因为查询大数据量的时候,CBO优化的指标是就是查询时间,使用full table scan,的情况下使用DB_File_Multiblock_read_count的I/O参数进行数据的fetch操作,比普通的block size级别I/O操作要迅速的多。所以在实际的大数据量环境,就变成了full table scan.

建议你看看 oracle 提供的oracle tuning & reference 9.2 release2. 里面提到了full table scan的优点。可以给你一些有用的提示。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
9
授权会员
日期:2005-10-30 17:05:33生肖徽章2007版:鼠
日期:2008-03-10 09:58:31生肖徽章2007版:马
日期:2008-03-17 10:39:41奥运会纪念徽章:拳击
日期:2008-05-15 16:22:33生肖徽章2007版:牛
日期:2008-09-20 08:01:35生肖徽章2007版:鸡
日期:2008-09-24 19:23:48生肖徽章2007版:狗
日期:2009-05-06 17:28:36ITPUB9周年纪念徽章
日期:2010-10-08 09:32:25
16#
发表于 2008-4-11 16:56 | 只看该作者
不同的环境,CBO会产生的不同的执行计划, 尤其是你的表的数据量还不一样,数据统计不知道有没有做。

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2008-4-11 17:05 | 只看该作者
影响sql执行计划的因素有很多
实际的数据量,where条件带入的数据,表统计信息,索引统计信息,柱状图,还有一些参数(OPTIMIZER_MODE,OPTIMIZER_FEATURES_ENABLE,DB_FILE_MULTIBLOCK_READ_COUNT,OPTIMIZER_INDEX_CACHING,OPTIMIZER_INDEX_COST_ADJ)等都会影响执行计划,甚至主机配置等都对执行计划有影响。

首先你两个数据库的数据不一样,所以很难说为什么两边执行计划不一样。建议你确定两个执行计划中,哪个是比较优的,然后分析如何让差的那个选择好的执行计划。

使用道具 举报

回复
论坛徽章:
21
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:兔
日期:2011-01-20 12:58:492011新春纪念徽章
日期:2011-02-18 11:42:47ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:50:44法拉利
日期:2013-09-10 14:11:32本田
日期:2014-02-16 22:57:59奔驰
日期:2014-02-16 23:04:212014年新春福章
日期:2014-02-18 16:41:112011新春纪念徽章
日期:2011-01-04 10:24:58
18#
发表于 2008-4-11 17:07 | 只看该作者
原帖由 mihawk 于 2008-4-10 15:48 发表
首先, 做为DBA, 拿到一个SQL, 要明白这个SQL走什么执行计划是最优的, 也就是说心理要先做一把人脑CBO.
然后, explain看看, 看CBO得到的执行计划跟你脑海里的是不是一样的.
如果不一样, 再查找原因.

有一个原则, CBO很官僚, 只认系统统计信息, 而不管数据真实的统计情况(除非动态sampling).
所以如果系统统计信息本来就失真, 那CBO基于这个统计信息得到的执行计划就很有可能是错误的.

DBA可以做的是确认执行计划错误是不是因为统计信息错误, 如果是, 那么修正统计信息, 直到执行计划正确.




good!!!

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
19#
发表于 2008-4-11 17:07 | 只看该作者
原帖由 leon_0036 于 2008-4-11 16:39 发表
主要是我两张表都建了Index,为什么测试的时候scan是按Index的,而正式的scan是按full table的???


和你的统计信息有关,不同的硬件、操作系统,导致的统计信息是不同的。

使用道具 举报

回复

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

本版积分规则 发表回复

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