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

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

Есть запрос который собирает информацию по фрагментации индексов
SELECT 
    @currentProcID, 
    dm.database_id, 
    dm.[object_id], 
    tbl.name, 
    dm.index_id, 
    idx.name, 
    dm.avg_fragmentation_in_percent, 
    dm.fragment_count, 
    dm.page_count, 
    idx.fill_factor, 
    dm.partition_number
FROM sys.dm_db_index_physical_stats(5, null, null, null, null) dm
    INNER JOIN sys.tables tbl ON dm.object_id = tbl.object_id
    INNER JOIN sys.indexes idx ON dm.object_id = idx.object_id AND dm.index_id = idx.index_id
WHERE page_count > 8
    AND avg_fragmentation_in_percent > 5
    AND dm.index_id > 0


Вопрос, в каком порядке надо подавать индексы на ребилд\реорганайз. Мне кажется что сначала надо пересторить кластерный, а потом в след перестраивать некластерные индексы этой таблицы, т.е. в скрипт добавить сортировку

SELECT 
    --@currentProcID, 
    dm.database_id, 
    dm.[object_id], 
    tbl.name, 
    dm.index_id, 
    idx.name, 
    dm.avg_fragmentation_in_percent, 
    dm.fragment_count, 
    dm.page_count, 
    idx.fill_factor, 
    dm.partition_number
FROM sys.dm_db_index_physical_stats(5, null, null, null, null) dm
    INNER JOIN sys.tables tbl ON dm.object_id = tbl.object_id
    INNER JOIN sys.indexes idx ON dm.object_id = idx.object_id AND dm.index_id = idx.index_id
WHERE page_count > 8
    AND avg_fragmentation_in_percent > 5
    AND dm.index_id > 0
order by tbl.name, dm.index_id


Я правильно понимаю?
19 ноя 12, 11:20    [13493366]     Ответить | Цитировать Сообщить модератору
 Re: Какие индексы надо перестраивать в первую очередь?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andrew shalaev,

Нет разницы, в каком порядке перестраивать/дефрагментировать индексы. В некоторых билдах MS SQL 2000 был баг — при ребилде кластерного индекса заодно перестраивались все некластерные индексы в заданной таблице. У вас же как минимум версия 2005, в документации даже отдельно указано (ALTER INDEX), что "Rebuilding a clustered index does not rebuild associated nonclustered indexes unless the keyword ALL is specified."

Хотя упорядочивание по имени/идентификатору может быть полезно по другой причине — чтобы примерно понимать, на какой стадии сейчас находится процесс ребилда/реорганайза.
19 ноя 12, 13:14    [13494163]     Ответить | Цитировать Сообщить модератору
 Re: Какие индексы надо перестраивать в первую очередь?  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Гость333,

спасибо.
19 ноя 12, 13:34    [13494291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить