首批通过分布式安全可靠测评,为关键业务系统打造
GATHER_INDEX_STATS
更新时间:2026-03-30 15:35:54
GATHER_INDEX_STATS 过程用于收集索引统计信息。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持。
语法
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 | 用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。 |
| indname | 索引名称。 |
| partname | 分区名称。 |
| estimate_percent | 预估行的百分比。 有效范围为 [0.000001,100]。 |
| stattab | 指定存储统计信息用户表的表名。 |
| statown | 指定存储统计信息用户表的用户名称。 |
| degree | 并行度。默认值是 NULL。NULL 表示使用由 CREATE TABLE 或 ALTER TABLE 语句中的 DEGREE 子句指定的表默认值。当使用 DEGREE=>NULL、DEGREE=>n 时,如果对象的大小不保证实现并行执行,则 DBMS_STATS 可能会采用串行执行。 |
| granularity | 要收集的索引统计信息的粒度(仅适用于当表已分区时)。
|
| no_invalidate | 收集统计信息时是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。 |
| force | 是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集索引统计信息。 |
| tabname | 表名称。 |
异常情况
| 错误码 | 描述 |
|---|---|
| OBE-20000 | 该索引不存在或权限不足。 |
| OBE-20001 | 输入值错误。 |
使用说明
要调用此过程,必须是表的所有者。对于使用由 SYS 所拥有的对象,需要是表的所有者或具有 SYSDBA 权限才能调用此过程。
示例
收集用户 testUser01 的 tbl1 表的索引 idx1 的统计信息。
obclient> CALL DBMS_STATS.GATHER_INDEX_STATS('testUser01', 'idx1', degree=>4, tabname=>'tbl1');
Query OK, 0 rows affected
说明
OceanBase 数据库 Oracle 模式下无需指定 tabname,因为索引在当前用户下是唯一的,但是 MySQL 模式需要显式指定表名,因为索引在当前用户下是非唯一的。