如何在Oracle中的每个表空间中找到最大的表

时间:2017-03-16 09:43:15

标签: sql oracle

我创建了以下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

有什么想法吗?

2 个答案:

答案 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;