Jaka jest różnica między indeksami klastrowanymi i nieklastrowanymi w Microsoft SQL Server?

Jaka jest różnica między indeksami klastrowanymi i nieklastrowanymi w Microsoft SQL Server?

Indeks pomaga SQL Server szybko pobierać dane z wierszy. Indeksy działają jak spis treści na początku książki, umożliwiając szybkie wyszukanie strony, na której znajduje się dany temat. Bez indeksów SQL Server musi przeskanować wszystkie wiersze w tabeli, aby znaleźć rekord.

Istnieją dwa typy indeksów w SQL Server: klastrowe i nieklastrowane. Dowiedz się, jaka jest różnica między indeksami klastrowymi i nieklastrowymi i dlaczego są one ważne.

Indeks klastrowany w SQL Server

W indeksie klastrowym wiersze danych są fizycznie przechowywane w uporządkowany sposób na podstawie wartości klucza. Ponieważ indeks obejmuje tabelę i może układać wiersze tylko w jednym porządku, można utworzyć tylko jeden indeks klastrowany na tabelę.

Podczas gdy indeksy przyspieszają pobieranie wierszy z zakresu, instrukcje INSERT i UPDATE mogą być powolne, ponieważ optymalizator zapytań skanuje indeks w określonej kolejności, dopóki nie znajdzie indeksu docelowego.

Indeks nieklastrowany w SQL Server

Indeks nieklastrowany zawiera kluczowe wartości, których wpisem jest wskaźnik zwany lokalizatorem wierszy. W przypadku tabel klastrowanych (tabel z indeksem klastrowym) wskaźnik wskazuje klucz w indeksie klastrowym, który z kolei wskazuje wiersz w tabeli. W przypadku wierszy bez indeksu klastrowego wskaźnik wskazuje bezpośrednio wiersz tabeli.

Jak utworzyć indeks klastrowany w SQL Server

Podczas tworzenia tabeli z kluczem podstawowym SQL Server automatycznie tworzy klucz indeksu klastrowego na podstawie tego klucza podstawowego. Jeśli nie masz klucza podstawowego, możesz wykonać następującą instrukcję, aby utworzyć klucz indeksu klastrowego.

CREATE CLUSTERED INDEX <index name>
ON TABLE <table_name>(column_name)

W tej instrukcji określasz nazwę indeksu, nazwę tabeli, w której chcesz go utworzyć, oraz nazwę kolumny, która ma zostać użyta w indeksie.

Jeśli dodasz klucz podstawowy do tabeli, która ma już indeks klastrowany, SQL Server utworzy z nim indeks nieklastrowany.

Aby utworzyć indeks klastrowany, który nie zawiera kolumny klucza podstawowego, należy najpierw usunąć ograniczenie klucza podstawowego.

USE database_name
ALTER TABLE table_name
DROP CONSTRAINT pk_name
GO

Usunięcie ograniczeń klucza podstawowego powoduje również usunięcie indeksu klastrowego, umożliwiając utworzenie niestandardowego.

Jak utworzyć indeks nieklastrowany w SQL Server

Aby utworzyć indeks nieklastrowany, użyj następującej instrukcji.

CREATE INDEX <index name>
ON TABLE <table_name>(column_name)

Możesz także użyć słowa kluczowego NONCLUSTERED w następujący sposób:

CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name)

Ta instrukcja tworzy indeks nieklastrowany w określonej tabeli i zawiera wskazaną kolumnę.

Jeśli chcesz, możesz posortować kolumny w porządku rosnącym (ASC) lub malejącym (DESC).

CREATE [NONCLUSTERED] INDEX <index name>
ON TABLE <table_name>(column_name ASC/DESC)

Który indeks wybrać?

Zarówno indeksy klastrowane, jak i nieklastrowane skracają czas wykonywania zapytań. Jeśli większość twoich zapytań to operacje SELECT na kilku kolumnach w tabeli, indeksy klastrowe są szybsze. Jednak w przypadku operacji INSERT lub UPDATE indeksy nieklastrowane są szybsze, ponieważ optymalizator zapytań może zlokalizować kolumnę bezpośrednio z indeksu.

Jak widać, te indeksy najlepiej sprawdzają się w przypadku różnych zapytań SQL. Dlatego większość baz danych SQL odniesie korzyści z posiadania co najmniej jednego indeksu klastrowego i indeksów nieklastrowych dla kolumn, które są regularnie aktualizowane.

Znaczenie indeksów w SQL Server

Indeksy klastrowane i nieklastrowane prowadzą do wyższej wydajności zapytań. Po uruchomieniu zapytania optymalizator zapytań skanuje indeks w poszukiwaniu lokalizacji przechowywania wiersza, a następnie pobiera informacje z tej lokalizacji. Jest to znacznie szybsze niż skanowanie wszystkich wierszy w tabeli.

Możesz także użyć indeksów nieklastrowanych, aby rozwiązać zakleszczenia wyszukiwania zakładek, tworząc indeks nieklastrowany dla kolumn, do których mają dostęp zapytania.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *