基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
SET_INDEX_STATS
更新时间:2026-11-03 16:36:52
SET_INDEX_STATS 过程用于设置与索引相关的信息。
语法
DBMS_STATS.SET_INDEX_STATS (
ownname VARCHAR(65535),
indname VARCHAR(65535),
partname VARCHAR(65535) DEFAULT NULL,
numrows DECIMAL(30, 10) DEFAULT NULL,
force BOOLEAN DEFAULT FALSE,
avgrlen DECIMAL(30, 10) DEFAULT NULL,
nummacroblks DECIMAL(30, 10) DEFAULT NULL,
nummicroblks DECIMAL(30, 10) DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
tabname VARCHAR(65535) DEFAULT NULL);
参数说明
| 参数 | 解释 |
|---|---|
| ownname | 表所在的 Schema。 |
| indname | 索引名称。 |
| partname | 分区名称。 |
| no_invalidate | 收集统计信息是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。 |
| numrows | 索引中的行数(分区)。 |
| force | 是否强制设置索引统计信息,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会设置索引统计信息。 |
| avgrlen | 索引表的平均行长(以字节为单位)。 |
| nummacroblks | 索引表宏块数。 |
| nummicroblks | 索引表的微块数。 |
| tabname | 表名称。 |
异常情况
| 错误码 | 描述 |
|---|---|
| HY000 |
|
使用说明
要调用此过程,必须是表的所有者。对于由
SYS所拥有的对象,需要是表的所有者或具有SYSDBA权限才能调用此过程。优化器通过缓存数据来估计索引或统计表访问的缓存块数。操作的总成本包括从磁盘读取未缓存块的 I/O 成本、从缓冲区中获取缓存块的 CPU 成本以及处理数据的 CPU 成本。
示例
设置用户 testUser01 的索引 idx1 的相关信息。
obclient> CALL DBMS_STATS.SET_INDEX_STATS('testUser01', 'idx1', numrows=>10, avgrlen=>10,
tabname=>'tbl1');
Query OK, 0 rows affected
说明
OceanBase 数据库 Oracle 模式下无需指定 tabname,因为索引在当前用户下是唯一的,但是 MySQL 模式需要显式指定表名,因为索引在当前用户下是非唯一的。