跳到主要内容

SET_TABLE_STATS

SET_TABLE_STATS 过程用于设置表级的基本统计信息。

语法

DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE);

参数解释

参数解释
ownname用户名。如果用户名设置为 NULL,会默认使用当前登录用户名。
tabname表的名称。
partname存储统计信息的表分区的名称。 如果表已分区且 partnameNULL,则统计信息存储在全局表级别。
numrows表级的总行数。
numblks表级占用的块数。
avgrlen列级的平均长度(以字节为单位)。
no_invalidate收集统计信息是否刷 Plan Cache。设置为 TRUE 表示收集统计信息时不刷 Plan Cache。
force是否强制收集,并忽略锁的状态。默认为 FALSE。如果设置为 TRUE,即使统计信息被锁定,也会收集统计信息。

异常情况

错误码描述
HY000
  • 该对象不存在或权限不足。
  • 无效或不一致的输入值。
  • 该对象的统计信息被锁定。

使用说明

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

  • 优化器通过缓存数据来估计索引或统计表访问的缓存块数。操作的总成本包括从磁盘读取未缓存块的 I/O 成本、从缓冲区中获取缓存块的 CPU 成本以及处理数据的 CPU 成本。

示例

置用户 testUser01 的表 tbl1 的总行数为一万行。

CALL DBMS_STATS.SET_TABLE_STATS('testUser01', 'tbl1', numrows=>10000, force=>FALSE, no_invalidate=>FALSE);
Query OK, 0 rows affected