基于表达式的索引和统计信息概要文件

RUNSTATS 命令的统计信息概要文件工具可自动为特定表(其中包括具有基于表达式的索引的表)收集定制统计信息。 此工具会存储 RUNSTATS 命令的选项以方便将来使用,从而简化了统计信息收集。

RUNSTATS 命令提供用于注册并使用统计信息概要文件的选项,该文件指定要针对特定表收集的统计信息的类型。 要同时注册概要文件和收集统计信息,请发出带有 SET PROFILE 参数的 RUNSTATS 命令。 要仅注册概要文件,请发出带有 SET PROFILE ONLY 参数的 RUNSTATS 命令。 要使用已注册的概要文件收集统计信息,请发出带有 USE PROFILE 参数的 RUNSTATS 命令。

如果要针对特定列收集非标准统计信息,那么统计信息概要文件很有用。 但是,对于 RUNSTATS 命令,不能以列的名称命名表达式。 因此,要收集非标准统计信息,将对基本表和统计视图发出 RUNSTATS 命令。 此策略会产生使表和统计视图统计信息保持同步的问题。 相反,发出 RUNSTATS 命令会使用表的统计信息概要文件,并且如果该概要文件将具有基于表达式的键的索引包括在其规范中,那么还会应用与该索引关联的统计视图上的任何统计信息概要文件。 因此,仅针对该表使用一个 RUNSTATS 操作就会收集所有统计信息,因为会应用所有相关概要文件。

如果该表不具有与它关联的统计信息概要文件,或者您没有指定 USE PROFILE 参数,那么当 RUNSTATS 工具运行时,不会应用所关联统计视图上的任何概要文件。 一般来说,此行为仅适用于与包括基于表达式的键的索引关联的统计视图,而不适用于统计视图。

在与索引(它包括基于表达式的键)关联的统计视图上创建统计信息概要文件时,会自动在基本表上创建统计信息概要文件(但仅当不存在统计信息概要文件时)。

如果有一个统计信息概要文件与基本表关联,并且还有一个统计信息概要文件与统计视图关联,那么对具有基于表达式的索引的表运行 RUNSTATS 命令时,会按如下方式使用这些概要文件:
  • 表的概要文件控制非表达式列的统计信息,而 RUNSTATS 命令总体进行控制。
  • 统计视图的统计信息概要文件控制表达式列的统计信息。

auto_runstats 数据库配置参数和实时统计信息 (rts) 功能会应用这些统计信息概要文件,其应用方式与手动发出的 RUNSTATS 命令应用这些统计信息概要文件的方式相同。 如果统计视图的统计信息概要文件存在,并且底层表具有包括了基于表达式的索引的统计概要文件,那么 auto_runstats 数据库配置参数和 rts 功能会应用该统计视图的统计信息概要文件。 auto_runstats 数据库配置参数和 rts 功能都不会直接对基于表达式的索引的统计视图起作用。 当 auto_runstats 数据库配置参数和 rts 功能直接对该表本身起作用时,会收集统计视图统计信息。 此外,rts 功能不会针对基于表达式的索引生成统计视图统计信息。

示例

下列初始条件适用于示例:
  • 表 TBL1 没有任何统计信息概要文件。
  • 表 TBL1 具有基于表达式的索引 IND1。
  • 索引 IND1 具有自动生成的统计视图 IND1_V。
  • NUM_FREQVALUES 数据库配置参数设置为缺省值 10

示例 1

以下命令设置统计视图 IND1_V 上的统计信息概要文件,该概要文件会收集额外的分布统计信息:

RUNSTATS ON VIEW IND1_V WITH DISTRIBUTION DEFAULT NUM_FREQVALUES 40 SET PROFILE ONLY

由于该表上不存在任何统计信息概要文件,因此当采用以下格式发出命令时,会生成统计信息概要文件:

RUNSTATS ON TABLE TBL1 WITH DISTRIBUTION AND SAMPLED DETAILED INDEXES ALL

现在,发出了以下命令:

RUNSTATS ON TABLE TBL1 USE PROFILE

会应用该表上的统计信息概要文件以及该统计视图上的统计信息概要文件。 会针对该表以及该索引中的表达式列收集统计信息。 该表中的列具有通常数量的高频值统计信息,而该统计视图中的列则具有较多高频值统计信息。

示例 2

以下命令设置一个统计信息概要文件,该概要文件对大型表进行采样并且旨在缩短 RUNSTATS 命令的执行时间以及减少对总体系统的影响(设置了该概要文件,但没有发出用于对该表进行采样的命令):
RUNSTATS ON TABLE TBL1 WITH DISTRIBUTION AND INDEXES ALL TABLESAMPLE SYSTEM (2.5) INDEXSAMPLE SYSTEM (10) SET PROFILE ONLY UTIL_IMPACT_PRIORITY 30

已决定索引 IND1 中基于表达式的键上不需要分布统计信息。 但是,该索引中的第二个键列上需要 LIKE 统计信息。 按照目录中对统计视图 IND1_V 的定义,该视图中的第二列名为 K01。

发出了以下命令来将该统计信息概要文件修改为针对统计视图 IND1_V 中的列 K01 收集 LIKE 统计信息(设置了该概要文件,但没有发出用于收集统计信息的命令):
RUNSTATS ON VIEW IND1_V ON ALL COLUMNS AND COLUMNS(K01 LIKE STATISTICS) SET PROFILE ONLY

现在,设置了该统计信息概要文件,并且发出了以下命令来收集基于该统计信息概要文件的统计信息:

RUNSTATS ON TABLE TBL1 USE PROFILE
会应用该表上的统计信息概要文件以及该统计视图上的统计信息概要文件。 会针对该表以及基于表达式的列收集统计信息。 结果如下所示:
  • 会针对基本表列收集分布统计信息,但不会针对基于表达式的键列收集分布统计信息。
  • 会针对指定的基于表达式的键列收集 LIKE 统计信息。
  • RUNSTATS 命令运行时,会按该表的概要文件中 INDEXSAMPLE SYSTEM(10) 参数指示的比率对基于表达式的键列值进行采样。
  • 该表的 UTIL_IMPACT_PRIORITY 参数设置控制整个 RUNSTATS 命令操作的优先级。