Подтвердить что ты не робот

SQL Server: В чем разница между перестройкой индекса и реорганизацией индекса?

В чем разница между перестройкой индекса и реорганизацией индекса?

4b9b3361

Ответ 1

Подумайте о том, как внедрен индекс. Обычно это какое-то дерево, например дерево B + или B-дерево. Сам индекс создается путем поиска ключей в данных и построения дерева, чтобы эффективно выполнять поиск таблицы.

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

Когда вы перестраиваете индекс, вы удаляете существующее дерево и читаете все записи, создавая новое дерево непосредственно из данных. Это дает вам новое и, надеюсь, оптимизированное дерево, которое может быть лучше результатов реорганизации таблицы; он также позволяет вам восстанавливать дерево, если оно каким-то образом повреждено.

Ответ 2

REBUILD блокирует таблицу для всего периода операции (это может быть часы и дни, если таблица большая).

REORGANIZE не блокирует таблицу.

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

Как отмечалось в @Andomar, существует опция REBUILD индекса онлайн, которая создает новый индекс, а когда операция завершена, просто заменяет старый индекс на новый.

Это, конечно, означает, что у вас должно быть достаточно места, чтобы сохранить как старую, так и новую копию индекса.

REBUILD также является операцией DML, которая изменяет системные таблицы, влияет на статистику, включает отключенные индексы и т.д.

REORGANIZE - операция чистой очистки, которая оставляет все системное состояние как есть.

Ответ 3

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

Эта запись в блоге, которую я натолкнула на некоторое время, объяснит это намного лучше, чем я могу.:)

Ответ 4

Восстановите его, выталкивая текущие индексы и воссоздавая новые.

Реорганизация похожа на то, что дом был в порядке с тем, что у вас уже есть.

Хорошей практикой является использование фрагментации 30% для определения перестройки и реорганизации.

< 30% реорганизация против > 30% восстановления

Ответ 5

"Реорганизовать индекс" - это процесс очистки, организации и дефрагментации "уровня листа" B-дерева (на самом деле, страниц данных).

Восстановление индекса изменяет все B-дерево, воссоздавая индекс.

Рекомендуется, чтобы индекс был реорганизован, когда фрагментация индекса составляет от 10% до 40%; если фрагментация индекса превышает 40%, лучше его перестроить.

Восстановление индекса требует больше ресурсов, создает блокировки и замедляет производительность (если вы решите сохранить таблицу в Интернете). Итак, вам нужно найти подходящее время для этого процесса.

Ответ 6

В дополнение к вышеперечисленным отличиям (в основном перестроение будет создавать индекс заново, а затем "поменять его на" для существующего, вместо того, чтобы пытаться исправить существующий), важно сообразить, что перестройка - даже Enterprise ONLINE rebuild - будет мешать транзакциям изоляции моментальных снимков.

TX1 запускает транзакцию моментального снимка
TX1 читается с T

TX2 восстанавливает индекс на T
TX2 перестроить полностью

TX1 снова прочитал из T:

Ошибка 3961, транзакция изоляции моментальных снимков завершилась неудачно в базе данных, поскольку объект, к которому обратился оператор, был изменен оператором DDL в другой параллельной транзакции с момента начала этой транзакции. Это запрещено, потому что метаданные не версируются. Параллельное обновление метаданных может привести к несогласованности, если они смешаны с изоляцией моментальных снимков.

Ответ 7

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

Реорганизация индекса - Дефрагментация кластеризованных и вторичных индексов указанной таблицы