【问题标题】:Fetch size for each table in OracleOracle中每个表的获取大小
【发布时间】:2018-01-16 09:29:24
【问题描述】:

我想在Oracle中获取数据库中每个表的大小

所以我试着用这种方式来做

参考

 select
   table_name,
   to_number(
   extractvalue(
      xmltype(
         dbms_xmlgen.getxml('select count(*) c from '||table_name))
    ,'/ROWSET/ROW/C')) count
from 
   user_tables
order by 
   table_name;

尝试查询

select
   table_name,
   to_number(
   extractvalue(
      xmltype(
         dbms_xmlgen.getxml('select bytes/1024/1024 from user_segments where segment_name="' || table_name|| '"'))
    ,'/ROWSET/ROW/C')) count
from 
   user_tables
order by 
   table_name;

但如果没有 for 循环,我将无法获得它。

【问题讨论】:

  • 如果您想直接访问user_tables 中可用的列,则不需要 XML 内容。 XML“hack”只是在常规查询中运行动态 SQL 的一种解决方法(不恢复为 PL/SQL)
  • 索引空间怎么样?
  • 如果您确实需要计算每个表中的行数,而不是相信dbms_stats 捕获的num_rows,那么select count(*) * 10 from some_table sample block(10) 的一些变体将更有效地给出近似值。

标签: sql oracle plsql oracle11g


【解决方案1】:

你的例子可以通过加入来完成:

select
   a.table_name,
   b.bytes/1024/1024 as MB
from 
   user_tables a
join user_segments b
   on b.segment_name=a.table_name
order by 
   table_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2021-03-31
    • 2017-04-17
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多