简单地问一问,在填充表之后,我通过我的解释计划注意到,在大多数情况下,索引似乎只有在执行GATHER_TABLE_STATS之后才会生效:
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,我只是不知道是否有必要,请注意,我的解释计划似乎表明了这一点,否则,除非我在查询中添加提示,否则索引就不会被使用。
发布于 2012-07-24 18:13:46
收集统计数据和重建索引是两件完全不同的事情。
发布于 2012-07-25 05:13:30
如果重新构建了所有索引,则不需要收集索引的统计信息。从10g开始,取消了COMPUTE STATISTICS选项,因为"Oracle现在在创建和重建索引期间自动收集统计信息“。
在您的表上收集统计信息可能很有帮助,但是通过设置cascade => false可以节省一些时间。
https://dba.stackexchange.com/questions/21916
复制相似问题