关于通过不使用dba_tables,tab,ALL_TABLES来获取行数

时间:2014-05-01 12:57:51

标签: sql oracle

我有一些关于获取行数的问题..如果我这样做

select NUM_ROWS,table_name from dba_tables;

我可以获取所有表和记录计数..问题是假设TABLE_NAMEE是我的表名,我有50条记录,我删除了20条记录。当我做的时候

select count(*) from TABLE_NAMEE;

我有30条记录,但是当我做

select NUM_ROWS from dba_tables where table_name ='TABLE_NAMEE';

我正在获取50条记录,因为我的数据库人员更新架构每月一次。那么如何在不使用dba_tables选项卡的情况下获取ORACLE中的所有表名及其各自的行数,但我可以使用它们来获取不是行数的表名。

1 个答案:

答案 0 :(得分:1)

从以下查询中获取NUM_ROWS意味着 DBMS_STATS 会更新no.of rows值。因此,它不包含表格中的当前行数,但上次运行DBMS_STATS时计算了 近似值

SELECT table_name, 
       num_rows 
  FROM dba_tables 
 WHERE TABLE_NAME='NAME' 

更新DBA_TABLES视图中的最新num_rows值执行

exec dbms_stats.gather_schema_stats(ownname => 'NAME');`

注意: 上面的句子"它不包含表格中的当前行数,但是上次运行DBMS_STATS时计算的近似值。" 因此,即使在更新之后,它也会被包含在内。仍然是近似值,而不是确切的行数。 (但它可能是一个更好的近似值)

使用count(*)调用no的计算。从表中的行。所以这个速度较慢,但​​得到了正确的结果。