Уменьшить фрагментацию таблицы SQL Server, не добавляя/отбрасывая кластерный индекс?

У меня есть большая база данных (данные на 90 ГБ, индексы на 70 ГБ), это медленно росло в течение прошлого года, и рост/изменения вызвал большой объем внутренней фрагментации не только индексов, но и самих таблиц.

Легко решить (большое количество) очень фрагментированные индексы - РЕОРГАНИЗОВЫВАНИЕ или ВОССТАНОВИТЬ будет заботиться, которых, в зависимости от насколько фрагментированный они - но единственный совет, который я могу найти при чистке фактической фрагментации таблицы, состоит в том, чтобы добавить кластерный индекс к таблице. Я сразу отбросил бы его впоследствии, поскольку я не хочу кластерного индекса на продвижении таблицы, но есть ли другой метод выполнения этого без кластерного индекса? Команда "DBCC", которая сделает это?

Спасибо за помощь.

12
задан SqlRyan 26 July 2010 в 16:39
поделиться

1 ответ

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

Кластерный индекс устраняет фрагментацию путем сортировки по кластерному ключу, но вы говорите, что этот ключ невозможно будет использовать в будущем. Возникает вопрос: зачем вообще проводить дефрагментацию с использованием этого ключа?

Логично было бы создать этот кластерный ключ и сохранить его, поскольку вы, очевидно, хотите/нуждаетесь в данных, отсортированных таким образом. Вы говорите, что при изменении данных возникнут штрафы за перемещение данных, которые невозможно выдержать; не думали ли вы о создании индекса с более низким FILLFACTOR, чем значение по умолчанию? В зависимости от паттернов изменения данных, вы могли бы извлечь выгоду из чего-то низкого, вплоть до 80%. Тогда у вас будет 20% "неиспользуемого" пространства на странице, но преимущество меньшего разделения страниц при изменении значений кластеризованных ключей.

Может ли это помочь вам?

.
1
ответ дан 2 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: