跳到主要内容

GATHER_INDEX_STATS

GATHER_INDEX_STATS 过程用于收集索引统计信息。

语法

DBMS_STATS.GATHER_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
estimate_percent NUMBER DEFAULT AUTO_SAMPLE_SIZE,
stattab VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
degree NUMBER DEFAULT NULL,
granularity VARCHAR2 DEFAULT DEFAULT_GRANULARITY,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
tabname VARCHAR2 DEFAULT NULL
);

参数说明

参数解释
ownname表所在的 Schema。
indname索引名称。
partname分区名称。
estimate_percent预估行的百分比。 有效范围为 [0.000001,100]。
stattab指定存储统计信息用户表的表名。
statown指定存储统计信息用户表的用户名称。
degree并行度。默认值是 NULLNULL 表示使用由 CREATE TABLEALTER TABLE 语句中的 DEGREE 子句指定的表默认值。当使用 DEGREE=>NULLDEGREE=>n 时,如果对象的大小不保证实现并行执行,则 DBMS_STATS 可能会采用串行执行。
granularity要收集的索引统计信息的粒度(仅适用于当表已分区时)。
  • ALL:收集所有(子分区、分区和全局)索引统计信息。
  • APPROX_GLOBAL AND PARTITION: 类似于 GLOBAL AND PARTITION,但在这种情况下,全局索引统计信息是分区级别统计信息的汇总。此选项将汇总不同值的数量和索引不同键的数量之外的所有索引统计信息。但只汇总带有索引统计信息的分区。如果 partnameNULL 或无法执行汇总(例如缺少其中一个分区的索引统计信息),则会收集全局索引统计信息。
  • AUTO:根据分区类型确定粒度。它是默认值。
  • DEFAULT:收集全局和分区级别的索引统计信息。此选项已废弃,建议使用 GLOBAL AND PARTITION
  • GLOBAL:收集全局索引统计数据。
  • GLOBAL AND PARTITION:收集全局和分区级别的索引统计信息。即使是复合分区对象,也不会收集子分区级别的索引统计信息。
  • PARTITION:收集分区级别的索引统计信息。
  • SUBPARTITION:收集子分区级别的索引统计信息。
no_invalidate收集统计信息时是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。
force是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集索引统计信息。
tabname表名称。

异常情况

错误码描述
HY000
  • 该索引不存在或权限不足。
  • 输入值错误。

使用说明

要调用此过程,必须是表的所有者。

示例

收集用户 testUser01tbl1 表的索引 idx 的统计信息。

CALL DBMS_STATS.GATHER_INDEX_STATS('testUser01', 'idx1', degree=>4, tabname=>'tbl1');
Query OK, 0 rows affected
信息

seekdb 需要显式指定表名,因为索引在当前用户下是非唯一的