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!
sql-server
performance
index
BlueChippy
źródło
źródło
insert into
i w tej chwili nie maorder by
klauzuli, ale mógłbym to dodać, gdyby to pomogło? Identyfikator i kod są również indeksowane osobno.Odpowiedzi:
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ę. :)
źródło
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ć:
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ć.
źródło