我创建了以下SQL语句,但它总体上向我展示了最大的表。我想在每个表空间中看到它。
select tablespace_name, max(BYTES/1024/1024), SEGMENT_NAME
from dba_segments
where SEGMENT_TYPE='TABLE'
group by tablespace_name,SEGMENT_NAME,tablespace_name
有什么想法吗?
答案 0 :(得分:1)
使用FIRST功能时可以缩短时间:
SELECT tablespace_name, MAX(BYTES/1024/1024),
MAX(SEGMENT_NAME) KEEP (DENSE_RANK LAST ORDER BY BYTES)
FROM dba_segments
WHERE SEGMENT_TYPE = 'TABLE'
GROUP BY tablespace_name;
注意,由于SEGMENT_TYPE = 'TABLE'
,您的查询将不包含分区表。
另外请注意,如果多个表具有完全相同的大小,则每个表空间只能获得一个表。使用来自APC的解决方案,因为您需要所有表格。
答案 1 :(得分:0)
使用分析函数按大小顺序对表进行排名:
SELECT
tablespace_name,segment_name,tab_size_mb
FROM
(
SELECT
tablespace_name,segment_name,bytes/1024/1024 tab_size_mb,
RANK() OVER (PARTITION BY tablespace_name ORDER BY bytes DESC) AS rnk
FROM dba_segments
WHERE segment_type='TABLE'
)
WHERE rnk=1;