Чи слід перебудовувати індекс після усікання / великої вставки?


10

У мене зберігається процедура, яка обрізає деякі таблиці з приблизно 1,75М рядків у кожній, перед тим як вставляти нові дані (на основі даних в інших таблицях, обчислень тощо)

Основні контури дуже прості:

  • Обрізати таблиці
  • Вставте 1,75М рядків «партіями» приблизно 75 000 разів.

Мені цікаво, чи варто явно переробляти індекси в будь-який час цього процесу? напр

  • Обрізати таблиці
  • 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 - точніший розробник, який добре знає БД!


Ще трохи інформації про структуру таблиць, індекси, які існують сьогодні, і вигляд вставлених даних (чи це в певному порядку? Чи відповідає це кластерному індексу?) Допоможе. Також я припускаю, що ця таблиця недоступна, поки цей процес не буде виконано? Це добре знати, що є варіанти для масового імпорту.
Майк Уолш

Можливо, вам слід урізати вставку таблиці до неї і подивитися, яка ваша фрагментація індексу, щоб побачити, чи потрібно вам.
Зене

v: Стандарт 2008 року. Вихідні дані - це декілька таблиць поетапних дій, до яких дані завантажуються з csv, excel, Oracle та інших db SQL. На цьому етапі всі таблиці є однаковими: 6 ідентифікаторів char, 3 char-коду, 10 знаків після коми (20,5). Первинний ключ - ID + код. Дані завантажуються через, insert intoі на даний момент немає ніякого order byзастереження, але я можу додати, що якщо це допоможе? Ідентифікатор та код також індексуються окремо.
BlueChippy

Відповіді:


6

Як і у більшості питань такого типу, це залежить. Навряд чи ви будете вставляти дані у "правильному" порядку для всіх залучених індексів, це означає, що всі ці індекси, ймовірно, зустрінуть багато розбиття сторінок під час процесу вставки. Тож припустимо, що ви вставляєте в кластерному порядку індексу. Ви можете вимкнути всі некластеризовані індекси, усікати, виконати вставку, а потім відновити всі некластеризовані індекси. Звичайно, спроби обох підходів скажуть тобі правду, яка швидше, незалежно від теорії, що стоїть за нею. :)


1

План базового з усіма включеними індексами може бути повільним і може призвести до фрагментації.

ALTER INDEX REBUILD на усіченій і, отже, порожній таблиці не виконує жодних цілей, тому вам потрібно внести зміни до свого плану A. Це має бути:

  • TRUNCATE
  • Вставити
  • АЛЬТЕР ІНДЕКС ВІДНОСНО

Це може бути повільним, але принаймні ви отримуєте різкі показники.

План Б прекрасний. Перевірте всі три і подивіться, що найшвидше і яке дає найменшу фрагментарність індексу. Тоді вирішіть, чи варто перебудовувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.