首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle11G-索引重建VS GATHER_TABLE_STATS

问Oracle11G-索引重建VS GATHER_TABLE_STATS
EN

Database Administration用户
提问于 2012-07-24 18:06:42
回答 2查看 33.7K关注 0票数 5

简单地问一问,在填充表之后,我通过我的解释计划注意到,在大多数情况下,索引似乎只有在执行GATHER_TABLE_STATS之后才会生效:

代码语言:javascript
复制
Exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'USER/SCHEMA', tabname => 'MYTABLE', cascade=> true, degree=> 8);

“梯级”属性被定义为:为该表收集索引的统计信息。索引统计信息收集没有并行化。使用此选项相当于在表的每个索引上运行GATHER_INDEX_STATS过程。

因此,我的问题是,我应该在REBUILD之前运行索引的GATHER_TABLE_STATS,因为我假设收集索引统计数据并重新构建它们不是一回事,或者是这样吗?

目前,我运行dbms_index_utl.build_table_indexes来重建我的索引,然后是GATHER_TABLE_STATS,我只是不知道是否有必要,请注意,我的解释计划似乎表明了这一点,否则,除非我在查询中添加提示,否则索引就不会被使用。

EN

回答 2

Database Administration用户

发布于 2012-07-24 18:13:46

收集统计数据和重建索引是两件完全不同的事情。

  • Oracle中的索引需要重建是非常罕见的,因此任何定期重建索引的进程都是非常可疑的。我强烈怀疑重建索引是不必要的。我强烈建议花一些时间阅读Richard的索引内部-重建真理,以了解为什么很少需要重建索引,以及需要重建索引的少数情况。
  • 当数据卷或分布发生重大变化时,您确实需要收集表和索引的统计信息,以便为优化器提供它所需的信息,以确定适当的查询计划。如果在空表上创建索引并随后向表中插入数百万行,则需要收集统计信息,以告诉优化器该表不再是1个空区段。除非禁用自动作业,否则Oracle还将自动收集自上次每天清晨收集统计数据以来发生重大更改的任何对象的统计信息。
票数 7
EN

Database Administration用户

发布于 2012-07-25 05:13:30

如果重新构建了所有索引,则不需要收集索引的统计信息。从10g开始,取消了COMPUTE STATISTICS选项,因为"Oracle现在在创建和重建索引期间自动收集统计信息“。

在您的表上收集统计信息可能很有帮助,但是通过设置cascade => false可以节省一些时间。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/21916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档