DBMS_STATS.GATHER_TABLE_STATS如何在oracle中运行

时间:2017-06-30 07:57:00

标签: oracle

我需要澄清DBMS_STATS.GATHER_TABLE_STATS的工作原理。 我有一个场景,如果我正在创建表,同样的表也用于包创建。换句话说,包编译依赖于表创建。

在表创建脚本中的索引创建命令之后是否必须包含DBMS_STATS.GATHER_TABLE_STATS。

DBMS_STATS.GATHER_TABLE_STATS在哪种情况下工作,无论是用于包编译还是包执行。请确认。

1 个答案:

答案 0 :(得分:0)

DBMS_STATS为Oracle优化器提供信息,使Oracle能够为SQL语句构建高效的执行计划。编译对象永远不需要优化程序统计信息。

收集统计数据是一个非常复杂的主题,起初可能很难提出正确的问题。我建议您先阅读手册,例如Managing Optimizer Statistics: Basic Topics

通常,您的统计信息收集策略应如下所示:

  1. 每当对象的数据发生重大变化时,手动收集统计信息。
  2. 使用默认自动任务自动收集缓慢变化或意外遗忘的对象的统计信息。
  3. 要回答一些具体问题,您可能想要在创建表格后立即收集统计信息。仅在更改数据后收集统计信息。收集空桌上的统计数据可能很危险; Oracle会认为该表有0行,直到下次收集统计信息。最好根本没有统计数据,然后Oracle可以使用动态抽样来估计统计数据。

    (但另一方面,如果表创建为SELECT语句并包含大量数据,则可能需要收集统计信息。然后,如果您使用12c,它可能会自动收集统计信息在创建表时。)

    创建索引后,通常也不需要收集统计信息。在创建或重建索引时,Oracle会自动收集索引统计信息。