Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как ускорить запрос  [new]
leonix
Member

Откуда:
Сообщений: 403
Нужно получить самые большие индексы для удаления в тестовых база для программистов
Пытаюсь вот таким запросом получить топ наибольших индексов. Но запрос очень долго выполняется. Я ни разу не дождался результата.

DROP TABLE #temptab
select top 100 
object_id,index_id 
into #temptab 
from sys.dm_db_index_physical_stats(db_id(''),null,null,null,'LIMITED') 
where index_type_desc='NONCLUSTERED INDEX' 
order by page_count desc



Как можно получить топ больших индексов?
11 дек 18, 10:52    [21759944]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить запрос  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
SELECT TOP(100) o.[object_id]
              , obj_name = s.[name] + '.' + o.[name]
              , index_name = i.[name]
              , total_space = CAST(i2.total_pages * 8. / 1024 AS DECIMAL(18, 2))
FROM sys.objects o
JOIN sys.indexes i ON i.[object_id] = o.[object_id]
JOIN sys.schemas s ON o.[schema_id] = s.[schema_id]
JOIN (
    SELECT p.[object_id]
            , p.index_id
            , total_pages = SUM(a.total_pages)
    FROM sys.partitions p
    JOIN sys.allocation_units a ON p.[partition_id] = a.container_id
    GROUP BY p.[object_id]
            , p.index_id
) i2 ON o.[object_id] = i2.[object_id] AND i2.index_id = i.index_id
WHERE o.[type] IN ('V', 'U')
    AND o.is_ms_shipped = 0
ORDER BY i2.total_pages DESC
11 дек 18, 11:33    [21760008]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить запрос  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Выгребание данных из sys.allocation_units самое быстрое что можно предложить, а потом уже фильтровать по тем индексам которые вам нужны. Но там нужно понимать что не для всех индексов размер вернется корректно. Например для колумнсторов запрос будет чуть отличаться, как и для ИнМемори таблиц.
11 дек 18, 11:35    [21760011]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить запрос  [new]
leonix
Member

Откуда:
Сообщений: 403
AlanDenton, спасибо! Моментально отработал.
11 дек 18, 11:35    [21760012]     Ответить | Цитировать Сообщить модератору
 Re: Как ускорить запрос  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
Велкомс :) к слову если будет желание тулу по обслуживания индексов попробовать, то стучитесь на Хабре @AlanDenton
Думаю Вам такое как раз будет интересным раз такие запросы пишете
11 дек 18, 11:38    [21760018]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить