- 11.02.2019
- 4 minuty na przeczytanie
-
- M
- M
- C
- M
- r
-
+9
Dotyczy: SQL Server (wszystkie obsługiwane wersje) Azure SQL Database
Indeks to struktura na dysku związana z tabelą lub widokiem, która przyspiesza pobieranie wierszy z tabeli lub widoku. Indeks zawiera klucze utworzone na podstawie co najmniej jednej kolumny tabeli lub widoku. Klucze te są przechowywane w strukturze (B-drzewo), która umożliwia SQL Server szybkie i wydajne znajdowanie wiersza lub wierszy skojarzonych z wartościami klucza.
Tabela lub widok może zawierać następujące typy indeksów:
-
Klastrowane
- Klastrowane indeksy sortują i przechowują wiersze danych w tabeli lub widoku na podstawie ich kluczowych wartości. To są kolumny zawarte w definicji indeksu. W tabeli może istnieć tylko jeden indeks klastrowy, ponieważ same wiersze danych mogą być przechowywane tylko w jednej kolejności.
- Jedynym momentem, w którym wiersze danych w tabeli są przechowywane w kolejności posortowanej, jest sytuacja, gdy tabela zawiera indeks klastrowy. Jeśli tabela ma indeks klastrowy, nazywana jest tabelą klastrowaną. Jeśli tabela nie ma indeksu klastrowego, jej wiersze danych są przechowywane w nieuporządkowanej strukturze zwanej stertą.
-
Nieklastrowane
-
Indeksy nieklastrowe mają strukturę oddzielną od wierszy danych. Indeks nieklastrowy zawiera wartości klucza indeksu nieklastrowego, a każdy wpis wartości klucza ma wskaźnik do wiersza danych zawierającego wartość klucza.
-
Wskaźnik z wiersza indeksu w nieklastrowanym indeks do wiersza danych nazywany jest lokalizatorem wierszy. Struktura lokalizatora wierszy zależy od tego, czy strony danych są przechowywane na stercie, czy w tabeli klastrowanej. W przypadku sterty lokalizator wierszy jest wskaźnikiem do wiersza. W przypadku tabeli klastrowej lokalizatorem wierszy jest klucz indeksu klastrowego.
-
Możesz dodać kolumny niebędące kluczem do poziomu liścia indeksu nieklastrowego, aby ominąć istniejące limity kluczy indeksu, i wykonuj w pełni zakryte, zindeksowane zapytania. Aby uzyskać więcej informacji, zobacz Tworzenie indeksów z dołączonymi kolumnami. Aby uzyskać szczegółowe informacje na temat limitów kluczy indeksów, zobacz Specyfikacje maksymalnej pojemności dla programu SQL Server.
-
Zarówno indeksy klastrowe, jak i nieklastrowe mogą być unikalne. Oznacza to, że żadne dwa wiersze nie mogą mieć tej samej wartości dla klucza indeksu. W przeciwnym razie indeks nie jest unikatowy i wiele wierszy może mieć tę samą wartość klucza. Aby uzyskać więcej informacji, zobacz Tworzenie unikalnych indeksów.
Indeksy są automatycznie obsługiwane dla tabeli lub widoku za każdym razem, gdy modyfikowane są dane w tabeli.
Dodatkowe typy indeksów specjalnego przeznaczenia znajdują się w sekcji Indeksy.
Indeksy i ograniczenia
Indeksy są tworzone automatycznie, gdy ograniczenia PRIMARY KEY i UNIQUE są zdefiniowane w kolumnach tabeli. Na przykład podczas tworzenia tabeli z ograniczeniem UNIQUE Aparat baz danych automatycznie tworzy indeks nieklastrowy. Jeśli skonfigurujesz KLUCZ PODSTAWOWY, Aparat baz danych automatycznie tworzy indeks klastrowany, chyba że indeks klastrowany już istnieje. Podczas próby wymuszenia ograniczenia klucza podstawowego w istniejącej tabeli i indeks klastrowany już istnieje w tej tabeli, SQL Server wymusza klucz podstawowy przy użyciu indeksu nieklastrowego.
Aby uzyskać więcej informacji, zobacz Tworzenie kluczy podstawowych i Twórz unikalne ograniczenia.
W jaki sposób indeksy są używane przez Query Optimizer
Dobrze zaprojektowane indeksy mogą zmniejszyć operacje we / wy dysku i zużywać mniej zasobów systemowych, poprawiając tym samym wydajność zapytań. Indeksy mogą być pomocne w przypadku różnych zapytań zawierających instrukcje SELECT, UPDATE, DELETE lub MERGE. Rozważ zapytanie SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250
w bazie danych AdventureWorks2012. Po wykonaniu tego zapytania optymalizator zapytań ocenia każdą dostępną metodę pobierania danych i wybiera najbardziej wydajną metodę. Metodą może być skanowanie tabeli lub może skanować jeden lub więcej indeksów, jeśli istnieją.
Podczas skanowania tabeli optymalizator zapytań czyta wszystkie wiersze w tabeli i wyodrębnia wiersze, które spełniają kryteria zapytania. Skanowanie tabeli generuje wiele operacji we / wy dysku i może wymagać dużej ilości zasobów. Jednak skanowanie tabeli może być najbardziej wydajną metodą, jeśli na przykład zestaw wyników zapytania stanowi wysoki procent wierszy z tabeli.
Gdy optymalizator zapytań używa indeksu, przeszukuje kolumny klucza indeksu, znajduje lokalizację przechowywania wierszy wymaganych przez zapytanie i wyodrębnia pasujące wiersze z tej lokalizacji. Ogólnie przeszukiwanie indeksu jest znacznie szybsze niż przeszukiwanie tabeli, ponieważ w przeciwieństwie do tabeli indeks często zawiera bardzo mało kolumn na wiersz, a wiersze są posortowane.
Optymalizator zapytań zazwyczaj wybiera najbardziej wydajną metodę podczas wykonywania zapytań. Jeśli jednak żadne indeksy nie są dostępne, optymalizator zapytań musi użyć skanowania tabeli. Twoim zadaniem jest zaprojektowanie i utworzenie indeksów najlepiej dostosowanych do danego środowiska, tak aby optymalizator zapytań miał wybór wydajnych indeksów do wyboru. SQL Server udostępnia Doradcę dostrajania aparatu bazy danych, który pomaga w analizie środowiska bazy danych i wyborze odpowiednich indeksów.
Ważne
Aby uzyskać więcej informacji na temat wytycznych dotyczących projektowania indeksów i wewnętrzne, zapoznaj się z Przewodnikiem projektowania indeksów programu SQL Server.
- Przewodnik projektowania indeksów programu SQL Server
- Tworzenie indeksów klastrowych
- Tworzenie nieklastrowanych Indeksy