0

以下两个查询(以 DBA 身份执行)产生两个不同的行数。

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

select count(*) from JIRA.JIRAISSUE;

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

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

提前致谢。

4

3 回答 3

4

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

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

于 2013-01-16T14:07:13.003 回答
1

如果要all_tables返回准确的计数,则必须这样分析:

analyze table JIRAISSUE compute statistics

这样,当您运行上述语句时,它将返回正确的结果。但是,在下一次插入时,它会不正确,直到您重新分析。

于 2013-01-16T14:06:13.107 回答
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 ;
于 2013-05-18T03:13:55.317 回答