Bez indeksu klastrowanego tabela jest zorganizowana jako sterty. Oznacza to, że każdy wiersz będący insertem jest dodawany na stronie danych na końcu tabeli. Również, gdy wiersze są aktualizowane, zostają przeniesione na stronę danych na końcu tabeli, jeśli zaktualizowane dane są większe niż poprzednio.
Kiedy dobrze jest nie mieć indeks klastrowany
Jeśli masz tabelę, która musi najszybsze wkładki, ale można poświęcić aktualizacji i odczytu prędkości, wtedy nie ma wskaźnik klastra mogą pracować ty. Przykładem może być tabela, która była używana jako kolejka, na przykład wiele wstawek, które później zostaną odczytane i przeniesione do innej tabeli.
Klastrowe Indeksy
indeksów klastrowanych organizować dane w tabeli na podstawie kolumn w indeksie klastrowym. Jeśli skupisz się na niewłaściwej rzeczy, na przykład unikalnego identyfikatora, może to spowolnić działanie (patrz poniżej).
Dopóki indeks klastrowy znajduje się na wartości, która jest najczęściej używana do wyszukiwania, i jest unikalna i zwiększa się, można uzyskać niesamowite korzyści wydajnościowe z indeksu klastrowego.Na przykład, jeśli masz tabelę o nazwie UŻYTKOWNICY, w której często szuka się danych użytkownika na podstawie USER_ID, wówczas grupowanie na USER_ID przyspieszyłoby wydajność wszystkich tych wyszukiwań. Zmniejsza to po prostu liczbę stron danych, które należy odczytać, aby uzyskać dostęp do danych.
Jeśli masz zbyt wiele kluczy w indeksie klastrowanym, może to również spowolnić działanie.
Ogólne zasady skupionych indeksów:
Nie klastra na jakichkolwiek kolumn varchar.
Klastrowanie na kolumnach IDENTYFIKACJI INT jest zwykle najlepsze.
Klaster dotyczący najczęściej wyszukiwanych haseł.
Klastry na UniqueIdentifiers
Z uniqueidentifiers w indeksie, są bardzo nieefektywne, ponieważ nie istnieje naturalny porządek. W oparciu o strukturę drzewa b-indeksu uzyskuje się skrajnie pofragmentowane indeksy przy użyciu uniqueidentifiers. Po przebudowie lub reorganizacji są nadal bardzo rozdrobnione. Więc kończy się wolniejszym indeksem, który w efekcie jest bardzo duży w pamięci i na dysku z powodu fragmentacji. Również w przypadku insertów identyfikatora unikatowego bardziej prawdopodobne jest, że strona zostanie podzielona na indeks, co spowalnia wstawianie. Ogólnie rzecz biorącidentyfikatory są złe dla indeksów.
Podsumowanie
Moja rada jest taka, że każda tabela powinna mieć klastrowego indeks na nim, chyba że jest to naprawdę dobry powód, aby nie (czyli tabela funkcjonują jako kolejka).
Oto pokrewne pytanie na temat [DBA-SE] (http://dba.stackexchange.com/) z pewnymi informacjami i kilkoma linkami, w których można przeczytać. [Wydajność indeksów bez klastrów na hałdach względem indeksów klastrowanych] (http://dba.stackexchange.com/questions/9829/performance-of-non-clustered-indexes-on-heaps-vs-clustered-indexes) –
Prawdopodobnie pytanie najlepiej odpowiedział ktoś znający zarówno Oracle, jak i SQL Server. [dba.se] może być lepszą lokalizacją dla tego. –
Sugerujemy również, aby przenieść to pytanie na dba.se. Miał dwa komentarze i (całkowicie przypadkową) odpowiedź od stałych bywalców DBA.SE bez żadnego z innych plakatów, które faktycznie zbierały te indeksy klastrowe, a IOT rzeczywiście mają znaczące różnice. – ConcernedOfTunbridgeWells