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!


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ę. :)


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ć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.