You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 21c中dbms_stats.gather_table_stats的作用及结果查看方法

DBMS_STATS.GATHER_TABLE_STATS 存储过程的作用

这个存储过程是Oracle官方提供的统计信息收集工具,核心作用是:

  • 收集指定表、关联列以及索引的优化器统计信息,包括表的总行数、数据块数、列的数据分布情况、索引的选择性等。
  • 这些统计信息是Oracle查询优化器生成高效执行计划的核心依据,缺少准确统计信息时,优化器可能选择低效查询路径,导致SQL执行变慢。
为什么查询DBA_TAB_STATISTICS无结果?如何查看执行结果?

问题原因

DBA_TAB_STATISTICS是DBA级别的数据字典视图,需要DBA角色或SELECT ANY DICTIONARY权限才能访问,普通用户(如你的bichvan用户)默认无此权限,因此查询无结果。

正确的查看方式

  1. 查询当前用户的表统计信息(推荐)
    用bichvan用户登录后,直接查询USER_TAB_STATISTICS视图(当前用户专属统计视图,无需额外权限):
SELECT table_name, num_rows, blocks, last_analyzed 
FROM user_tab_statistics 
WHERE table_name = 'EMPLOYEES';

结果中last_analyzed字段会显示统计信息的收集时间,num_rows为统计出的表行数,可据此确认存储过程是否执行成功。

  1. 验证统计生效的额外方式
    也可查询USER_TABLES视图确认统计收集时间:
SELECT last_analyzed FROM user_tables WHERE table_name = 'EMPLOYEES';

若返回具体时间戳,说明存储过程已成功收集统计信息。

  1. 如需查询DBA_TAB_STATISTICS
    切换到SYSDBA身份(比如用sqlplus sys/密码 as sysdba登录),执行:
SELECT owner, table_name, num_rows, last_analyzed 
FROM dba_tab_statistics 
WHERE owner = 'BICHVAN' AND table_name = 'EMPLOYEES';

或者给bichvan用户授予权限:

GRANT SELECT ANY DICTIONARY TO bichvan;

授予后bichvan用户即可查询DBA_TAB_STATISTICS视图。

注意事项

Oracle默认会将表名转换为大写,若创建表时用双引号指定小写(如CREATE TABLE "employees" (...)),查询视图时需用双引号匹配大小写:WHERE table_name = 'employees';。

内容的提问来源于stack exchange,提问作者Đỗ Như Vỹ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 13:10:30