从单个表和ALL_TABS查询时,Oracle表行计数不同

时间:2013-01-16 14:02:13

标签: sql oracle11g jira

以下两个查询(作为DBA执行)会产生两个不同的行数。

select table_name, num_rows from all_tables where owner = 'JIRA' and table_name = 'JIRAISSUE';

select count(*) from JIRA.JIRAISSUE;

我知道第二个查询返回正确的值。

  • 为什么会这样?我怀疑是有待处理的交易但不太确定。 (未完成的工作)
  • 是否有任何特定的SQL命令来“刷新”或“重新生成”ALL_TABS返回的数字?

提前致谢。

3 个答案:

答案 0 :(得分:4)

NUM_ROWS列只是 估算值 ,在更新表的统计信息时(仅)更新。

即使 DBMS_STATS.GATHER_TABLE_STATS()之后值也会反映正确的行数(可能,但不能保证,因为它只是一个估计

答案 1 :(得分:1)

如果您希望all_tables返回准确的计数,则必须按照以下方式进行分析:

analyze table JIRAISSUE compute statistics

这样,当你运行上面的语句时,它将返回正确的结果。但是,在下次插入时,在重新分析之前它将是不正确的。

答案 2 :(得分:0)

如果不运行分析仪,下面的查询会给出正确的结果:

select
table_name,
  to_number(
    extractvalue(
      xmltype(
   dbms_xmlgen.getxml('select count(*) c from '||table_name))
      ,'/ROWSET/ROW/C')) row_count
from ALL_TABLES ;