【发布时间】:2017-03-02 12:37:29
【问题描述】:
我一直在阅读有关在 Oracle 数据库上收集表和索引统计信息的内容,但这让我……感到困惑。
为了争论,我们假设 Oracle 11gR2 作为 RDBMS。关于收集表和索引的统计信息,应该什么时候完成,这是首选的方式,Oracle真的会自动为我们收集必要的统计信息吗?
关于第一点:什么时候做。我读过,根据经验,自上次分析表以来,大约 10% 的表记录已被修改(插入、更新等)后,才应收集表和索引统计信息。
关于第二点:这是首选的方式。如果我们想计算表和索引的统计信息,假设表没有分区,使用默认选项执行 DBMS_STATS.GATHER_TABLE_STATS 就足够了吗?
关于第三点:Oracle 真的会自动为我们收集必要的统计信息吗?如果是这种情况,我不应该担心收集表统计信息(参见第 1 点和第 2 点)吗?
提前致谢。
编辑:在ammoQ 的评论之后,我意识到这个用例的真正含义并不清楚,在这里。我的问题是关于通过用户操作(即手动操作)而不是通过通常由数据库作业运行的程序“操作”的表。以我为例。我的 ETL 流程每天加载几个表,大约需要 1 小时。在这 1 个小时中,大约一半用于分析表格本身。因此,在插入或更新之后,每天都会分析表格区域。这似乎有点矫枉过正,因此提出了问题。
【问题讨论】:
-
何时应该完成:至少,当您注意到查询优化器选择了错误的计划时。 ;-)
-
感谢您的评论。我已经澄清了这个问题。
-
收集表统计自动任务:asktom.oracle.com/pls/asktom/…