dba_tables表中的一行为NUM_ROWS数值为何不与该表用SELECT COUNT(*)得到的行数一样?
如在dba_tables表中有一行table_name为gang,其相应字段num_ROWS数值为39326,但我用 select count(*) from gang得到的行数为39328行,按理说后者应该是对的,为何具体表中的行数与系统表中保存相应表的行数不同步?希各高手请指点.谢谢了.

解决方案 »

  1.   

    SQL> conn system/system@orcl;
    Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 
    Connected as systemSQL> select count(*) from system.ttt;  COUNT(*)
    ----------
           210SQL> select dt.num_rows from dba_tables dt where dt.table_name='ttt';  NUM_ROWS
    ----------我的试验,跟你的论述完全不一样,我的是oracle 10.1.0.2.0 
      

  2.   

    别哥,我今早再试看了一下,又同步的了,这是不是在对表增加记录后,对系统表dba_tables的记录不及时更新的?是不是在一定时间后才更新的呢?昨天看得一定是不一样的.这完全可肯定.
      

  3.   

    num_rows 是对表做 statistics analysis 后填充,表和索引的统计分析工作,在9i是要手工做的,10i是可以自动做的。但肯定要有延迟。
      

  4.   

    dba_tables显示的表的记录数是对表进行分析以后才与表的真正记录数同步一次的
      

  5.   

    ttt 改为 TTT同时,num_rows是用来表示row的行数的,不过需要对表做了统计才会准确,在10g中awr会自动收集信息,但是是有时间的,你可以手工收集statistic SQL>exec dbms_stats.gather_table_stats(OWNNAME =>'username', TABNAME => 'tablename',METHOD_OPT => 'FOR ALL');收集完以后你再检查,这时是一样的。
    ==================================================================
    Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理如果你需要帮助或想和我一起学习的请联系
    联系方式QQ:370140387
    QQ群:  85837884(注明:数据库)
    电子邮件:[email protected]
    网站: http://www.inthirties.com