SQL Server: в чем разница между перестройкой индекса и реорганизацией индекса? - PullRequest
20 голосов
/ 17 мая 2009

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

Ответы [ 7 ]

30 голосов
/ 17 мая 2009

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

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

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

7 голосов
/ 17 мая 2009

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

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

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

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

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

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

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

3 голосов
/ 17 мая 2009

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

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

2 голосов
/ 27 декабря 2012

Перестройте его, удалив текущие индексы и воссоздав новые.

Перестройка - это как привести дом в порядок с тем, что у тебя уже есть.

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

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

0 голосов
/ 14 февраля 2014

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

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

TX2 перестраивает индекс на T
Восстановление TX2 завершено

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

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

0 голосов
/ 22 октября 2009

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

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

0 голосов
/ 17 мая 2009

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

Перестройка индекса - это изменение всего B-дерева, воссоздание индекса.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...