Co to jest Indeks klastrowany?

15

Potrzebuję krótkiego wyjaśnienia indeksu klastrowego.

  • Co to jest indeks klastrowany?
  • Jakie są najlepsze praktyki korzystania z indeksu klastrowanego?
Amir Rezaei
źródło
Dobrym pomysłem jest stosowanie dat w indeksie klastrowym, ponieważ nowe dane są zawsze dołączane na końcu tabeli.
Ralph Winters
1
Być może, ale nie zawsze.
mrdenny,
@mrdenny - czy mógłbyś opracować, kiedy tak nie byłoby?
Ralph Winters
1
Jeśli wiersze są wprowadzane poza kolejnością. Jeśli tabela jest częściej pytana przez klucz podstawowy. Jeśli kluczem podstawowym jest INT (lub mniejszy) i w tabeli będzie wiele indeksów nieklastrowanych, to klucz klastrowany w czasie danych byłby większy i mniej wydajny. Jeśli tabela nigdy nie będzie przeszukiwana według kolumny daty, użycie jest takie, ponieważ klucz do klastrowania nie byłby opłacalny, ponieważ byłyby używane tylko indeksy nieklastrowane.
mrdenny,
@mrdenny: także jeśli tabela nie ma kolumny z datą (przypadek podzbioru twojego ostatniego :)
ypercubeᵀᴹ

Odpowiedzi:

15

W prostych słowach...

Książka telefoniczna: dane to indeks / indeks to dane. Aby cię zobaczyć, zacznę od Rezaei, na przykład Amira. Nie jest wymagane wyszukiwanie zewnętrzne.

W kategoriach bazy danych:

Dane tabeli i indeks klastrowy są takie same (w SQL Server, także InnoDB, Oracle IOT)

Najlepsza praktyka jest wąska, liczbowa, ściśle rosnąca (pomyśl o TOŻSAMOŚCI lub kolumnie Autonumeracji). Typy danych, takie jak GUID, nie są dobrym pomysłem

Linki do przeczytania (aby uniknąć wzdęcia tej odpowiedzi)

Edytuj, aby w pełni wyjaśnić moje najlepsze praktyki, kliknij link w komentarzu Erica Humphrey'a: Queen of Indexing: Kimberly Tripp

gbn
źródło
3
Będziesz także chciał blog Kimberly Tripp: sqlskills.com/BLOGS/KIMBERLY/category/Clustered-Index.aspx
Eric Humphrey - lotsahelp
1
I tu leży problem z zastosowaniem „najlepszych praktyk” bez kontekstu. Na przykład, jeśli podstawowym kryterium wyszukiwania dla dużej często przeszukiwanej tabeli jest zakres dat, najlepszą lokalizacją dla indeksu klastrowanego jest przeszukiwana data, a NIE klucz podstawowy. Stwierdzenie, że tabela i indeks klastrowy są jednym i tym samym, jest nieco zbyt uproszczone. Dane są faktycznie przechowywane w kolejności podanej przez indeks klastrowany. Oznacza to między innymi, że indeksy klastrowe są szczególnie przydatne w przypadku przeszukiwania zakresu zwracającego pełny zestaw danych.
Russell Steen,
2
@ Russell Steen: 1. Uwzględniłem linki 2. OP musiał zapytać, zastanów się, na jakim poziomie podniosłem tę odpowiedź na 3. Eric Humphrey dostarczył link do tworzenia. Możemy analizować po kolei to, co my, bardziej doświadczeni, wiemy i rozumiemy, ale czy jesteśmy tutaj, aby pomóc w edukacji lub przytłoczyć ...?
gbn
Słyszę co mówisz. Problem nie tkwi w twojej odpowiedzi jako takiej, ale w tym, że mniej doświadczeni ludzie od ciebie biegają wokół cytowania i stosowania czegoś, ponieważ jest to „najlepsza praktyka” bez zrozumienia zastosowania i kontekstu, dla którego najlepsza praktyka została napisana - ja twierdzą, że tak, jesteśmy tutaj, aby edukować i że cytowanie najlepszych praktyk bez podawania większego kontekstu bezpośrednio w poście nie jest tak dobre.
Russell Steen
2
Och, właśnie zauważyłem SQL-Servertag, zignoruj.
ypercubeᵀᴹ
3

Jest to indeks samych danych, dzięki czemu rekordy są fizycznie sortowane według pola, na którym znajduje się indeks klastrowany. Dlatego możesz mieć tylko jeden Indeks klastrowy na tabelę.

Indeks nieklastrowany nie jest tak szybki do wyszukiwania, ale możesz mieć wiele tego rodzaju indeksów w tabeli.

kacalapy
źródło
3
Indeksy nieklastrowane mogą być równie wydajne dla wyszukiwań, jeśli indeks nieklastrowy obejmuje dane wyszukiwanie.
Russell Steen,
@ Russell Nie ma możliwości, aby było szybciej, ponieważ indeks wymusił faktyczną kolejność sortowania danych. Nie ma prostszego / szybszego sposobu znalezienia potrzebnych informacji przez SQL lub RDBMS.
kacalapy
4
Nie powiedziałem szybciej. Indeks obejmujący zawiera wszystkie dane wymagane w zaznaczeniu w indeksie - W ZAMÓWIENIU, w oddzielnej lokalizacji na dysku. Zatem wybór względem pasującego indeksu pokrycia nigdy nie trafia do tabeli.
Russell Steen
2
Pokrycie NCI prawdopodobnie będzie mniejsze, co oznacza mniej stron do czytania i szybsze.
Martin Smith
Powodem, dla którego w tabeli jest tylko jeden indeks klastrowany, nie jest fizyczne sortowanie, strony indeksu są zawsze logicznie sortowane, a ciągłe przydzielanie stron nie jest gwarantowane. Możesz mieć tylko jeden Indeks klastrowany na tabelę, ponieważ Indeks klastrowany jest samą tabelą, a indeksy nieklastrowane to kopie tabeli z wymaganymi kolumnami.
Manoj Pandey