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


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, более точен!


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

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.