为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:kylin v10
【CPU】:x86
【问题描述】*:想查询每张表的实际使用大小(表大小+所属索引的大小)
表大小:
SELECT A.OWNER AS “模式”,A.SEGMENT_NAME AS “表名”,A.BYTES/1024/1024 AS “大小(M)”,A.TABLESPACE_NAME AS “所属表空间”,B.COMMENTS AS “表注释” FROM DBA_SEGMENTS A,DBA_TAB_COMMENTS B WHERE A.OWNER=B.OWNER AND A.SEGMENT_NAME=B.TABLE_NAME AND A.OWNER=‘SYSDBA’ ORDER BY SEGMENT_NAME ASC;
索引信息:
SELECT TABLE_OWNER AS “表归属”,TABLE_NAME AS “表名”,OWNER AS “索引归属”,INDEX_NAME AS “索引名”,INDEX_TYPE AS “索引类型”,TABLESPACE_NAME AS “索引所在表空间”,JOIN_INDEX AS “是否组合索引”,DECODE(VISIBILITY,‘VISIBLE’,‘可见’,‘INVISIBLE’,‘不可见’) AS “索引是否可见” FROM DBA_INDEXES WHERE OWNER=‘SYSDBA’;
如果是想获取系统里表大小,可以使用TABLE_USED_SPACE(‘用户名’,‘表名’)page()/1024/1024.0方法。
如果是想看下实际大小,有一种实际大概估算方法。select count() from 模式表.表名;–(以字节为单位,一条记录为1KB),然后进行实际换算即可。这样比较贴合数据量。
至于统计整个模式下表,可以用拼sql方法或者 写存储过程方法进行 模式下全表统计。
select TABLE_USED_SPACE(‘用户名’,‘表名’)*page()/1024/1024.0 as TABLE_MB from dual;