问一个oracle执行计划的问题

[复制链接]
查看11 | 回复2 | 2010-10-13 18:36:33 | 显示全部楼层 |阅读模式
原文:
B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小 、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。
其中“这些统计信息起初在库内是没有的,是你在做analyze后才出现的”,我从来就没有对表做过什么analyze的操作啊.那这表就没有“统计信息”了 ,那还怎么CBO啊?

我有一个表,原来跑一个sql挺快的,再我处理了一些冗余信息(请了90%)后反而慢了。是不是“统计信息”不准了啊?

回复

使用道具 举报

千问 | 2010-10-13 18:36:33 | 显示全部楼层
PLSQL DEVELOP 按F5可以看到执行计划。如果是 改表了,最好重新ANALYZE一下。另外,你要看看执行计划的COST,是不是你需要的,如果不是。最好把执行计划删除。有的时候,读一个小表,一次I/O就可以完成的,做完ANALYZE,让你走索引了,那么就得至少2次I/O才能完成了。开销反而大了。ORACLE 有HINT ,可以在SQL语句里,加入HINT,显式的告诉PARSER,这个SQL语句走那个策略,是 CBO的,还是 RBO的 ,等等的!仅供参考!GOOD LUCK!
回复

使用道具 举报

千问 | 2010-10-13 18:36:33 | 显示全部楼层
execute dbms_stats.gather_table_stats()这个可以分析表
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行