Różnica między wyszukiwaniem indeksu klastrowego a wyszukiwaniem indeksu klastrowanego

10

Jaka jest różnica między wyszukiwaniem indeksu klastrowanego (CI) a wyszukiwaniem indeksu klastrowanego (NCI)? Czy jedno działa lepiej od drugiego?

Pytam o to, ponieważ mam tabelę z 50 milionami wierszy i 150 kolumnami. Ma kolumnę o nazwie IDzdefiniowanej jako indeks klastrowany. Jest na nim jeszcze jeden NCI o tym samym identyfikatorze klucza indeksu i siedmiu includekolumnach. Wydaje mi się, że indeks NC jest tutaj duplikatem i można go bezpiecznie usunąć.

Chcę więc opinii ekspertów / porad, czy można je bezpiecznie upuścić, czy też powinny pozostać nienaruszone?

SQLPRODDBA
źródło
Czy mówisz, że WSZYSTKIE kolumny są uwzględnione w indeksie klastrowym bez klastrów?
Ian Ringrose
Nie. Tabela zawiera 150 kolumn z kolumną ID zdefiniowaną jako CI i ma indeks NCI z ponownie kolumną ID jako kluczem indeksu i 7 dodatkowymi kolumnami w tym.
SQLPRODDBA
Wydaje się, że Paul White udzielił prawidłowej odpowiedzi, jednak pytam, czy powinieneś zmienić tabelę „podstawową” ze tabeli klastrowej na stertę. Lub nawet podziel tabelę w zależności od częstotliwości aktualizacji różnych kolumn, aby obniżyć koszty rejestrowania transakcji.
Ian Ringrose

Odpowiedzi:

26

Indeks nieklastrowany, który ma te same klucze * co indeks klastrowany, może być nadal przydatny, ponieważ indeks nieklastrowany będzie zwykle mniejszy i gęstszy. Pamiętaj, że indeks klastrowy zawiera wszystkie dane w wierszu, więc zwykle jest to najszerszy możliwy (najmniej gęsty) indeks.

* Te same kolumny kluczy, w tej samej kolejności, posortowane w ten sam sposób (asc / desc).

W przypadku wyszukiwania pojedynczego (wyszukiwanie przy użyciu predykatu równości do unikalnego indeksu) główną różnicą jest przypuszczalnie większa szansa, że ​​strona (strony) indeksowe (e) są potrzebne, aby znaleźć ten pojedynczy rekord już w pamięci. Wszystko jest jednakowe, indeks nieklastrowany ze 100 stronami ma większą szansę niż indeks klastrowany przechowywany na 10 000 stron.

Dla każdego innego rodzaju poszukiwania oprócz singletonu będzie również element skanujący. Część skanująca skorzysta również z większej gęstości indeksu nieklastrowanego (więcej wierszy na stronę). Nawet jeśli strony muszą pochodzić z trwałej pamięci, czytanie mniejszej liczby stron jest szybsze.

Powinieneś sprawdzić dokumentację systemu, zapytać osobę, która dodała indeks i / lub poszukać komentarzy do kodu, aby zrozumieć, dlaczego ten indeks istnieje. Należy również dokładnie sprawdzić pełne definicje indeksów , w tym kompresję, i przejrzeć skrypty konserwacji indeksów. Mogą istnieć inne szczególne powody posiadania nieklastrowanego indeksu (np. Zdolność do przebudowy online).

Paul White 9
źródło