【Oracle SQL】列出当前表空间内表行数最多的十张表

SQL:

select * from
(
    select rownum as sn,a.* from
    (
        select table_name,num_rows
        from user_tables
        where num_rows is not null
        order by num_rows desc
    ) a
) b
where b.sn<11;

执行结果:

SQL> select * from
  2  (
  3      select rownum as sn,a.* from
  4      (
  5          select table_name,num_rows
  6  from user_tables
  7  where num_rows is not null
  8  order by num_rows desc
  9      ) a
 10  ) b
 11  where b.sn<11;

        SN TABLE_NAME                       NUM_ROWS
---------- ------------------------------ ----------
         1 EMP_TO1                          10000000
         2 EMP_FROM                         10000000
         3 EMP_TO8                          10000000
         4 EMP615_30                        10000000
         5 EMP_TO                           10000000
         6 EMP_30                           10000000
         7 EMP_TO_10                        10000000
         8 EMP_TEST                         10000000
         9 EMP67_30                          6444381
        10 EMP619                            2000000

已选择10行。

SQL>

注意点:

如果显示与实际不符,是因为统计滞后的缘故,下面引用的短文说明了原因:

num_rows 是对表做 statistics analysis 后填充,表和索引的统计分析工作,在9i是要手工做的,10i是可以自动做的。但肯定要有延迟。dba_tables显示的表的记录数是对表进行分析以后才与表的真正记录数同步一次的
问:
有没有什么其他办法来实现让它及时同步呢?
答
在要统计的时候来一次同步

exec dbms_stats.gather_table_stats(OWNNAME =>'CSID', TABNAME => 'dba_extents',METHOD_OPT => 'FOR ALL');

以上这段文字来自:https://blog.csdn.net/whhitgen/article/details/8789781

END

posted @ 2022-06-22 18:31  逆火狂飙  阅读(564)  评论(0编辑  收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东