REBUILD - Кластерный индекс, ТАБЛИЦА или оба?

9

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

У меня есть очень большая таблица, к которой мы должны были добавить столбец. Кластерный индекс довольно сильно фрагментирован, и я хочу сделать это, ALTER INDEX REBUILDчтобы очистить его.

Я также обычно делаю, ALTER TABLE REBUILDкогда я изменяю столбцы, так как это очищает любые указатели или расщепления от этой операции.

Нужно ли делать оба, так как мы говорим о кластеризованном индексе, который по сути является таблицей?

Я подозреваю, что ALTER INDEX REBUILDкластер не будет обновлять все, что ALTER TABLEбудет, но я также боюсь, что ALTER TABLEон не очистит фрагментацию индекса.

JNK
источник
Перестроение IIRC не будет обновлять статистику столбцов. Сомневаюсь, что это актуально, так как в любом случае этого не произойдет. :-)
Аарон Бертран

Ответы:

6

Если вы перестраиваете кластеризованный индекс, вам не нужно перестраивать таблицу. Если таблица была кучей (не имела кластеризованного индекса), вы можете перестроить ее.

mrdenny
источник
Ранее я читал, что когда вы удаляете столбец, вы должны сделать это, ALTER TABLE REBUILDтак как это исправит указатели, не зафиксированные в перестроении индекса. Разве это больше не так?
JNK
Какие указатели? Я никогда не слышал этого. Удаление столбца не имеет указателей, если вы не говорите о типах данных TEXT, NTEXT, IMAGE в SQL 2000.
mrdenny
1
Я думаю, что мои опасения необоснованны ...
JNK
@JNK: я подозреваю, что вы имеете в виду DBCC CLEANTABLE, когда отбрасываете столбцы, что аналогично перестроению кластерного индекса stackoverflow.com/a/808368/27535 и dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
gbn
0

Пересборка сбрасывает и воссоздает индекс. Когда вы создаете кластерный индекс, он переупорядочивает строки таблицы в дополнение к созданию CIX (таблица без CIX - это куча).

Эрик Хиггинс
источник
4
Перестройка не удаляет и не воссоздает кластерный индекс. Удаление кластеризованного индекса превращает таблицу в кучу. Если перестроение будет «отброшено и воссоздано», должно быть промежуточное состояние, в котором таблица представляет собой кучу, что неверно. Если вы не верите мне, что промежуточной стадии кучи нет, подумайте, что если бы было достигнуто такое промежуточное состояние кучи, для «воссоздания» потребовалась бы сортировка, но быстрый взгляд на план выполнения перестроения показывает, что сортировки нет.
Ремус Русану
С наилучшими пожеланиями, Р.Р., мне нравится читать ваши посты, но я не уверен, почему вы спорите с этим. Я уже связал официальный MSDN. Из раздела «Перестройка индексов» примерно на полпути вниз, 1-й оператор: «Перестройка индекса сбрасывает и заново создает индекс». В этом утверждении нет никакой двусмысленности. Вот и снова: msdn.microsoft.com/en-us/library/ms188388.aspx
Эрик Хиггинс,
1
BOL и MSDN могут иметь плохой выбор формулировок время от времени, а затем снова и снова ... Это был бы такой случай.
Ремус Русану