Czy istnieje korzyść polegająca na tym, że partycja nie jest dopasowywana do indeksu?

9

Mam przywilej zarządzania dużą partycjonowaną tabelą OLAP. Przeglądając tę ​​tabelę zauważyłem, że jeden z indeksów nie jest zgodny ze schematem partycjonowania. Ponieważ autor nie jest dostępny i starannie spreparowane wyszukiwania Google nie przyniosły żadnych przydatnych wyników, nie jestem pewien, czy było to celowe czy przypadkowe.

Czy jest jakiś powód, aby nie wyrównywać indeksów na partycji w SQL Server 2008?

Rudzik
źródło
1
Możliwie. Zapytaj o wykorzystanie statystyki indeksu, aby sprawdzić, czy ten indeks jest używany. Jeśli tak, użyj zdarzeń rozszerzonych lub śledzenia po stronie serwera, aby zarejestrować, które zapytania trafiają do tego indeksu. Gdyby działały lepiej na indeksie wyrównanym do partycji, świetnie. Jeśli nie, sprawdź, czy rzeczywiście nie potrzebują wyrównanych indeksów partycjonowanych. Jeśli nie, powiedzmy, że i tak wyrównuje partycje, ponieważ przyszłe zapytania mogą z nich skorzystać. Oczywiście, jeśli koszt / wysiłek / przerwa jest zbyt wysoka, nie rób tego.
Ali Razeghi
Z tego, co przeczytałem, najlepszą praktyką dotyczącą indeksowania partycjonowanej tabeli jest wyrównanie indeksu ze schematem partycjonowania. Ta konkretna tabela sprawiła, że ​​pomyślałem, że chcę zrozumieć przypadek użycia, aby nie wyrównać indeksu ze schematem partycji. Nie próbuję rozwiązać konkretnego problemu, więc nie mam zapytania, które należy przeanalizować.
Robin
Innym powodem do zaprojektowania indeksu nieprzystosowanego jest indeks unikalny (w tym klucz podstawowy lub unikalne ograniczenie), który nie obejmuje kolumny partycjonowania. W takim przypadku indeks nie może być w ogóle podzielony na partycje lub podzielony na partycje przy użyciu innej funkcji / schematu.
Dan Guzman

Odpowiedzi:

11

Główną zaletą nie partycjonowanie (nieunikalny) indeks na partycje obiektu podstawy jest to, że działa się wokół długoletniej ograniczenia optymizatora związanego uporządkowanych danych, takich jak żądania MIN, MAXlub TOP (n)zapytań.

W indeksie podzielonym na partycje optymalizator zasadniczo nie może tłumaczyć MIN, MAXani TOP (n)na tę samą operację na partycję , a następnie końcowy globalny agregat dla częściowych agregatów dla partycji. Optymalizator wybiera plan wykonania, który skanuje wszystkie partycje indeksu. Wyjątkiem jest pojedynczy przypadek, w którym w kolumnie partycjonowania określono operację agregującą lub górną.

Powinienem wspomnieć, że istnieją również bardzo dobre powody, aby nie mieć żadnych niezaangażowanych indeksów. Wybór użycia niezaangażowanego indeksu musiałby być bardzo świadomym wyborem. Robiłem to sam (rzadko) w przeszłości, ale w bardzo szczególnych okolicznościach, w których korzyści wyraźnie przewyższały koszty lub nie było innej rozsądnej alternatywy.


Artykuł Itzika Ben-Gana wyjaśniający problem.

Paul White 9
źródło
3

Istnieje oczywisty problem związany z niektórymi ograniczeniami (np. Unikalnymi) wymagającymi niezaangażowanego indeksu.

Poza tym niepasujące indeksy mają duży koszt (przede wszystkim uniemożliwiają wielu operatorom równoległym przejście na wątek na partycję, a alternatywy są drogie pod względem pamięci), dlatego zdecydowanie odradzam takie indeksy. Nawet w przypadkach wymienionych przez Paula nadal odradzałbym niezaangażowane indeksy.

Remus Rusanu
źródło
1
Tak. Wybór niezaangażowanego indeksu musiałby być bardzo świadomym wyborem. Robiłem to sam (rzadko) w przeszłości, ale w bardzo szczególnych okolicznościach, w których korzyści przeważały koszty.
Paul White 9
2

Nieprzystosowane indeksy negują podstawową zaletę partycjonowania polegającego na przełączaniu partycji. Jeśli nie jesteś od tego zależny i partycjonujesz z innych powodów (inne miejsce do przechowywania, partycje tylko do odczytu, statystyki przyrostowe, ...), to idź dalej i utwórz niezaangażowany indeks.

Indeksy niewyrównane są przydatne, ponieważ można na nich wymusić unikalne ograniczenia dla całej tabeli. Ponadto niezaangażowane indeksy nie wymagają, aby klucz partycjonowania był niejawnym prefiksem wyszukiwania. Wyobraź sobie, że masz 10000 partycji i zapytania nie oparte na kluczu partycjonowania. Plan wykonania będzie wówczas musiał szukać w 10000 partycjach, jeśli indeks został wyrównany. Inne odpowiedzi zawierają dalsze przykłady.

usr
źródło