/ / drop index na poziomie partycji - sql-server, indexing

upuść indeks na poziomie partycji - sql-server, indeksowanie

Czy wiesz, czy istnieje sposób to zrobić w SQL Server (2008)?

Pracuję nad procesem ładowania DataWarehouse,więc chcę usunąć indeksy partycji, która jest ładowana, aby móc wykonać szybkie ładowanie zbiorcze, a następnie mogę ponownie zbudować indeks na poziomie partycji.

Myślę, że w Oracle jest to możliwe, ale może nie w SQL Server.

dzięki, Zwycięzca

Odpowiedzi:

1 dla odpowiedzi № 1

Nie, nie można pominąć indeksów tabeli tylko dla jednegopojedyncza partycja. Jednak SQL 2008 zawiera metodologię ładowania zbiorczego, która polega na ustawianiu drugiej tabeli z dokładnie tym samym schematem na oddzielnej partycji na tej samej grupie plików, ładowaniu jej, indeksowaniu w dokładnie taki sposób, a następnie "przełączaniu" nowej partycji za pomocą istniejąca, pusta partycja na stole produkcyjnym.

Jest to bardzo uproszczony opis. Oto artykuł MSDN dla SQL 2008 na temat realizacji tego: http://msdn.microsoft.com/en-us/library/ms191160.aspx


0 dla odpowiedzi nr 2

Wiem, że nie było to możliwe w SQL 2005. Nie słyszałem o czymś, co pozwoliłoby ci to zrobić w 2008 roku, ale może tam być (o czym czytałem, ale jeszcze go nie używałem). Najbliższe, jakie mogłem uzyskać, było wyłączenie indeksu, ale jeśli wyłączysz indeks klastrowany, nie będziesz mieć dostępu do tabeli. Nie wszystko to jest przydatne, imho.

Moje rozwiązanie dla naszego projektu ETL Warehouse byłoutwórz tabelę zawierającą wszystkie indeksy i ograniczenia indeksowania (PKs, UQ). Podczas ETL przechodzimy przez tabelę (przy ładowaniu wymaganego zestawu tabel), usuwamy indeksy / ograniczenia indeksowania, ładujemy dane, a następnie ponownie przechodzimy przez tabelę i odtwarzamy indeksy / wiązania. Trochę brzydki i trochę niezgrabny, ale po uruchomieniu nie ma przerwy - i ma dodatkową zaletę świeżo zbudowanych indeksów (tj. Brak fragmentacji i współczynnik wypełnienia może wynosić 100). Dodawanie / modyfikowanie / upuszczanie indeksów jest również niezręczne , ale nie aż tak mocno.

Możesz zrobić to dynamicznie - przeczytaj i zapiszindeksy / definicje ograniczeń z tabeli docelowej, upuść je, wczytaj dane, a następnie dynamicznie buduj i uruchamiaj (ponownie) twórz skrypty ze swoich przechowywanych danych. Ale jeśli coś się rozbije podczas biegu, jesteś tak martwy. (To dlatego zdecydowałem się na stałe stoły.)

Uważam, że działa to bardzo dobrze przy partycjonowaniu tabel, ponieważ wykonujesz całą pracę z tabelami "Ładowanie", a tabele live (dbo, dla nas) są nietknięte.