dba_tables表中的一行为NUM_ROWS数值为何不与该表用SELECT COUNT(*)得到的行数同步?

gongfriend2 2009-05-28 07:49:03
dba_tables表中的一行为NUM_ROWS数值为何不与该表用SELECT COUNT(*)得到的行数一样?
如在dba_tables表中有一行table_name为gang,其相应字段num_ROWS数值为39326,但我用 select count(*) from gang得到的行数为39328行,按理说后者应该是对的,为何具体表中的行数与系统表中保存相应表的行数不同步?希各高手请指点.谢谢了.
...全文
1082 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oraclelogan 的回复:]
引用楼主 gongfriend2 的帖子:

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



SQL code
SQL> conn system/system@orcl;
Connected to Oracle Databas…
[/Quote]


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(注明:数据库)
电子邮件:dba@Inthirties.com
网站: http://www.inthirties.com


gongfriend2 2009-05-29
  • 打赏
  • 举报
回复
飞不起来的笨鸟:有没有什么其他办法来实现让它及时同步呢?请指教,我在研究一个软件它的每一步操作引起对哪几张表的操作,飞不起来的笨鸟谢谢了.
wangsong145 2009-05-29
  • 打赏
  • 举报
回复
dba_tables显示的表的记录数是对表进行分析以后才与表的真正记录数同步一次的
ruihuahan 2009-05-29
  • 打赏
  • 举报
回复
num_rows 是对表做 statistics analysis 后填充,表和索引的统计分析工作,在9i是要手工做的,10i是可以自动做的。但肯定要有延迟。
gongfriend2 2009-05-29
  • 打赏
  • 举报
回复
别哥,我今早再试看了一下,又同步的了,这是不是在对表增加记录后,对系统表dba_tables的记录不及时更新的?是不是在一定时间后才更新的呢?昨天看得一定是不一样的.这完全可肯定.
oraclelogan 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 gongfriend2 的帖子:]
dba_tables表中的一行为NUM_ROWS数值为何不与该表用SELECT COUNT(*)得到的行数一样?
如在dba_tables表中有一行table_name为gang,其相应字段num_ROWS数值为39326,但我用 select count(*) from gang得到的行数为39328行,按理说后者应该是对的,为何具体表中的行数与系统表中保存相应表的行数不同步?希各高手请指点.谢谢了.
[/Quote]


SQL> conn system/system@orcl;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system

SQL> select count(*) from system.ttt;

COUNT(*)
----------
210

SQL> select dt.num_rows from dba_tables dt where dt.table_name='ttt';

NUM_ROWS
----------


我的试验,跟你的论述完全不一样,我的是oracle 10.1.0.2.0

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧