Должен ли я перестроить индекс после усечения / большой вставки?

10

У меня есть хранимая процедура, которая усекает некоторые таблицы с примерно 1,75 млн строк в каждой, прежде чем вставлять новые данные (на основе данных в других таблицах, расчетов и т. Д.)

Основная схема очень проста:

  • Усеченные таблицы
  • Вставьте 1,75 млн рядов в «партии» около 75000 за раз.

Мне интересно, если я должен явно перестроить индексы в любое время в этом процессе? например

  • Усеченные таблицы
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [или что-то подобное]
  • Вставьте 1,75 строки

или возможно

  • ALTER INDEX ALL ON xxx DISABLE
  • Усеченные таблицы
  • Вставьте 1,75 строки
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [или что-то подобное]

Любая помощь приветствуется ... не DBA - разработчик, который хорошо знает DB, более точен!

BlueChippy
источник
Может помочь некоторая дополнительная информация о структуре таблицы, существующих на сегодняшний день индексах и виде вставляемых данных (в определенном порядке? Соответствует ли это кластерному индексу?). Также я предполагаю, что эта таблица недоступна, пока этот процесс не будет завершен? Это полезно знать, чтобы иметь возможность массового импорта.
Майк Уолш
Возможно, вам следует обрезать вставку таблицы в нее и взглянуть на то, какова ваша фрагментация индекса, чтобы понять, нужно ли вам это.
Зейн
V: Стандарт 2008. Исходные данные - это несколько промежуточных таблиц, до этого данные загружались из CSV, Excel, Oracle и других баз данных SQL. На этом этапе все структуры таблиц идентичны: 6 символов ID, 3 символа кода, 10 столбцов десятичного числа (20,5). Первичный ключ - это ID + код. Данные загружаются через insert intoи на данный момент нет order byпункта, но я мог бы добавить, что, если это поможет? ID и код также индексируются отдельно.
BlueChippy

Ответы:

6

Как и в большинстве вопросов такого типа, это зависит. Маловероятно, что вы будете вставлять данные в «правильном» порядке для всех задействованных индексов, а это означает, что все эти индексы могут столкнуться с большим количеством разбиений страниц в процессе вставки. Итак, давайте предположим, что вы вставляете в порядке кластерного индекса. Вы можете отключить все некластеризованные индексы, усечь, выполнить вставку, а затем перестроить все ваши некластеризованные индексы. Конечно, пробуя оба подхода, вы узнаете правду о том, что быстрее, независимо от теории. :)

Бен Тул
источник
1

Plan Basic со всеми включенными индексами может работать медленно и может привести к фрагментации.

ALTER INDEX REBUILD для усеченной и, следовательно, пустой таблицы не имеет смысла, поэтому вам нужно изменить свой План A. Это должно быть:

  • TRUNCATE
  • Вставить
  • ALTER INDEX REBUILD

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

План Б в порядке. Протестируйте все три и посмотрите, какой из них самый быстрый, а какой дает наименьшую фрагментацию индекса. Затем решите, стоит ли восстановление.

Orbilin
источник