Difference between DBA_TABLES.num_rows and count(*)
One thing DBAs regularly do is to gather information on the schemas in the database for reporting. So we want to know how many rows there are in the tables of the schema “SIMON”. When doing so, one is tempted to query the DBA_TABLES view:
SQL> SELECT table_name, tablespace_name, num_rows
2 FROM dba_tables WHERE owner='SIMON' ORDER BY num_rows DESC;
TABLE_NAME TABLESPACE_NAME NUM_ROWS
------------------------------ ------------------------------ ----------
HUGE_TABLE DZ_DATA01 8227990
[..]
However, if we query the table directly, we get a different result:
SQL> SELECT count(*) FROM simon.HUGE_TABLE;
COUNT(*)
----------
8230310
Why is that so? When reading through the description of the ALL_TABLES
view, one finds the following note: