num_rows和count(*)的值爲何不同?

與原文比,略作改動~

num_rows和count的值爲何不同?

問:

dba_tables表中的一行爲NUM_ROWS數值爲何與該表用SELECT COUNT(*)得到的行

數不一樣?

SELECT * FROM DBA_TABLES WHERE OWNER=‘ZXF’;

如在dba_tables表中有一行table_name爲gang,其相應字段num_ROWS數值爲39008,

但我用 select count(*) from gang得到的行數爲38888行,按理說後者應該是對的,

爲何具體表中的行數與系統表中保存相應表的行數不同步?

答:
num_rows 是對錶做 statistics analysis 後填充,表和索引的統計分析工作,在9i是要手工做的,10i是可以自動做的。但肯定要有延遲。dba_tables顯示的表的記錄數是對錶進行分析以後才與表的真正記錄數同步一次的

num_rows字段的值是在最後一次收集統計信息之後更新的。 如果是頻繁變化(批量變化)的表,這個字段的值極爲不準確。
如果數據量變化不頻繁,這個字段的值也只是個大概數。


問:
有沒有什麼其他辦法來實現讓它及時同步呢?
答:
在要統計的時候來一次同步 ;
num_rows是用來表示row的行數的,不過需要對錶做了統計纔會準確,在10g中awr會自動收集信息,但是是有時間的,你可以手工收集statistic ;
SQL>exec dbms_stats.gather_table_stats(OWNNAME =>‘username’, TABNAME => ‘tablename’,METHOD_OPT => ‘FOR ALL’);

————————————————
版權聲明:本文爲CSDN博主「峯雨同行」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013758456/article/details/77447113

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章