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?
Odpowiedzi:
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
,MAX
lubTOP (n)
zapytań.W indeksie podzielonym na partycje optymalizator zasadniczo nie może tłumaczyć
MIN
,MAX
aniTOP (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.
źródło
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.
źródło
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.
źródło