Czy powinienem odbudowywać indeks po obcięciu / dużej wstawce?

10

Mam procedurę składowaną, która obcina niektóre tabele z około 1,75 mln wierszy w każdym, przed wstawieniem nowych danych (na podstawie danych z innych tabel, obliczeń itp.)

Podstawowy zarys jest bardzo prosty:

  • Obetnij tabele
  • Wstaw 1,75 mln wierszy w „partiach” około 75 000 na raz.

Zastanawiam się, czy powinienem wyraźnie odbudować indeksy w dowolnym momencie tego procesu? na przykład

  • Obetnij tabele
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [lub coś podobnego]
  • Wstaw 1,75 mln wierszy

a może

  • ALTER INDEX ALL ON xxx DISABLE
  • Obetnij tabele
  • Wstaw 1,75 mln wierszy
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [lub coś podobnego]

Jakakolwiek pomoc doceniona ... nie DBA - Dev, który dobrze zna DB, jest dokładniejszy!

BlueChippy
źródło
Pomocne byłoby trochę więcej informacji na temat struktury tabeli, istniejących obecnie indeksów i wyglądu wstawianych danych (czy to w określonej kolejności? Czy to jest zgodne z indeksem klastrowanym?). Zakładam też, że ta tabela jest niedostępna, dopóki ten proces nie zostanie zakończony? Warto wiedzieć, że istnieją opcje importu zbiorczego.
Mike Walsh,
Być może powinieneś skrócić do niej wstawkę tabeli i rzucić okiem na fragmentację indeksu, aby zobaczyć, czy potrzebujesz.
Zane,
v: 2008 Standard. Dane źródłowe to wiele tabel pomostowych, przed załadowaniem tych danych z plików CSV, Excel, Oracle i innych baz danych SQL. Na tym etapie wszystkie struktury tabel są identyczne: 6 znaków ID, 3 znaki kodu, 10 kolumn dziesiętnych (20,5). Kluczem podstawowym jest identyfikator + kod. Dane są ładowane insert intoi w tej chwili nie ma order byklauzuli, ale mógłbym to dodać, gdyby to pomogło? Identyfikator i kod są również indeksowane osobno.
BlueChippy,

Odpowiedzi:

6

Tak jak w przypadku większości tego typu pytań, to zależy. Jest mało prawdopodobne, aby wstawiać dane w „poprawnej” kolejności dla wszystkich zaangażowanych indeksów, co oznacza, że ​​wszystkie te indeksy mogą napotkać wiele podziałów stron podczas procesu wstawiania. Załóżmy więc, że wstawiasz w indeksie klastrowym. Możesz wyłączyć wszystkie indeksy nieklastrowane, obciąć, wstawić, a następnie odbudować wszystkie indeksy nieklastrowane. Oczywiście wypróbowanie obu podejść powie ci, że prawda jest szybsza, bez względu na teorię. :)

Ben Thul
źródło
1

Planowanie podstawowe z włączonymi wszystkimi indeksami może być powolne i może prowadzić do fragmentacji.

ZMIEŃ ODBUDOWA INDEKSU na okrojonej i dlatego pustej tabeli nie ma sensu, więc musisz zmienić swój plan A. Powinien to być:

  • ŚCIĘTY
  • Wstawić
  • ZMIEŃ ODBUDOWA INDEKSU

Może nadal jest powolny, ale przynajmniej masz ostre indeksy.

Plan B jest w porządku. Przetestuj wszystkie trzy i sprawdź, która jest najszybsza, a która daje najmniejszą fragmentację indeksu. Następnie zdecyduj, czy warto odbudować.

Orbilin
źródło