2015-06-26 2 views
0

Как узнать, какая самая большая таблица в базе данных и кто ее владеет?SQL Plus (Oracle 11)

SELECT 
    segment_name   TABLE_NAME,  
    SUM(bytes) table_size 
FROM 
    USER_SEGMENTS 
WHERE 
    SEGMENT_TYPE='TABLE' 
GROUP BY segment_name 

или я должен использовать (TOP) или (rowcount)

ответ

0

RowNum не поможет здесь, как rownums рассчитываются перед заказом, и вы хотите, большой стол.

with q as (
    Select segment_name as table_name, 
     sum(bytes) as table_size 
    from user_segments 
    group by segment_name 
) select hlp.table_name, hlp.table_size 
from (Select q.*, dense_rank() over(order by q.table_size desc) as rn from q) hlp 
where hlp.rn = 1; 

Это сделает трюк. Предложение WITH - это выражение общей таблицы (CTE), действительное в контексте следующего выбора под псевдонимом «q». Я хотел избежать нескольких вызовов, чтобы суммировать.

Функция dense_rank() внутри подзапроса в выводах from from, следующих за значениями раздела или порядка, который в нашем случае является уменьшающимся размером таблицы.

Подзапрос необходим для выбора первой строки.

Что касается использования таблиц словаря данных, я не проверял результат.

Смежные вопросы