Index with Included Columns

Dodając kolumny nonkey na poziomie poziom liścia indeks nieklastrowany można rozszerzyć funkcjonalność ponownego zbudowania indeksów nie klastrowanych.W tym nonkey kolumn, można utworzyć nieklastrowany indeksy obejmujące więcej kwerend.Wynika to z nonkey kolumny mają następujące zalety:

  • Mogą to być typów danych nie można użyć jako indeks klucz kolumn.

  • Nie są uważane za przez Database Engine podczas obliczania numer indeksu kolumny klucz lub indeksu rozmiar klucz.

Indeks o dołączone nonkey kolumn może znacznie poprawić wydajność kwerendy po wszystkich kolumn w kwerendzie są uwzględniane w indeksie albo jako klucz lub nonkey kolumn.Są osiągane zyski wydajności, ponieważ optymalizator kwerendy można znaleźć wartości kolumn w indeksie, indeks klastrowany danych lub tabela nie można uzyskać dostępu do co mniejszej liczby operacji We/Wy dysku.

Uwaga

Jeśli indeks zawiera wszystkie kolumny, które odwołują się jej jest zwykle określany jako obejmujące kwerendy kwerendy.

Gdy kolumny kluczy są przechowywane na wszystkich poziomach indeksu, nonkey kolumn są przechowywane tylko na poziomie poziom liścia.Aby uzyskać więcej informacji o poziomach indeksu zobacz Organizacja indeksu i tabela.

Unikaj ograniczeń rozmiaru za pomocą zestawu kolumn

Można dołączyć kolumny nonkey nieklastrowany indeks, aby uniknąć przekroczenia bieżących ograniczeń rozmiaru indeksu maksymalnie 16 kolumn klucz i rozmiar maksymalny indeks klucz 900 bajtów.The Database Engine does not consider nonkey columns when calculating the number of index klucz columns or index klucz size.

Na przykład, załóżmy, że mają być indeksowane w następujących kolumnach Document Tabela w AdventureWorks Przykładowa baza danych:

     Title nvarchar(50)

     Revision nchar(5)

     FileName nvarchar(400)

Ponieważ nchar i nvarchar typy danych wymagają 2 bajtów dla każdego znaku, indeks, który zawiera następujące trzy kolumny mogłaby przekroczyć limit rozmiaru 900 bajtów bajtami 10 (455 * 2). Za pomocą INCLUDE Klauzula CREATE INDEX Instrukcja, klucz indeks może być określona jako ()Title, Revision) i FileName zdefiniowana jako kolumna nonkey. W ten sposób rozmiar klucz indeksu będzie 110 bajtów (55 * 2), a indeks nadal będzie zawierać wszystkie wymagane kolumny.Poniższa instrukcja powoduje utworzenie takiego indeksu.

USE AdventureWorks;
GO
CREATE INDEX IX_Document_Title       
ON Production.Document (Title, Revision)       
INCLUDE (FileName);       

Indeks z wytycznymi dołączanych kolumn

Podczas projektowania ponownego zbudowania indeksów nie klastrowanych z kolumnami uwzględnione należy wziąć pod uwagę następujące wskazówki:

  • Nonkey kolumny są zdefiniowane w klauzula INCLUDE instrukcja CREATE INDEX.

  • Nonkey kolumny można zdefiniować tylko na ponownego zbudowania indeksów nie klastrowanych tabel lub widoków indeksowanych.

  • Dozwolone są wszystkie typy danych, z wyjątkiem text, ntext, a image.

  • Obliczane kolumny, które są deterministyczny i precyzyjne albo nieprecyzyjne mogą być dołączone kolumny.Aby uzyskać więcej informacji zobaczTworzenie indeksów na kolumny obliczane.

  • Podobnie jak w przypadku kolumn klucz kolumny obliczane jest pochodną image, ntext, a text typy danych mogą być nonkey kolumn (włączone), tak długo, jak typ danych kolumna obliczana jest dozwolona jako niekluczowa kolumna indeksu.

  • Nie można określić nazwy kolumn, na liście INCLUDE, a na liście kolumna klucz.

  • kolumna nazwy nie mogą się powtarzać na liście INCLUDE.

Wskazówki dotyczące rozmiaru kolumna

  • Musi być zdefiniowany co najmniej jedną kolumna klucz.Maksymalna liczba kolumn nonkey jest 1023 kolumn.Jest to maksymalna liczba kolumn w tabela pomniejszonej o 1.

  • Indeks kolumny klucz, z wyjątkiem nonkeys, muszą być zgodne z istniejących ograniczenia rozmiaru indeksu maksymalnie 16 kolumn klucz i rozmiar klucz całkowita indeksu na 900 bajtów.

  • Całkowity rozmiar wszystkich kolumn nonkey jest ograniczona tylko przez rozmiar kolumn określonych w klauzula INCLUDE; na przykład varchar(max) kolumny są ograniczone do 2 GB.

Wskazówki dotyczące modyfikacji kolumn

Po zmodyfikowaniu kolumny tabela, która została zdefiniowana jako kolumna dołączone, obowiązują następujące ograniczenia:

  • Nie można go usunąć nonkey kolumn z tabela, chyba że najpierw upuszczeniu indeksu.

  • Nonkey kolumny nie można zmienić, z wyjątkiem przypadków, aby wykonać następujące czynności:

    • Zmień opcje dopuszczania wartości null kolumna z NOT NULL wartość NULL.

    • Zwiększ długość varchar, nvarchar, lub varbinary kolumny.

      Uwaga

      Te ograniczenia modyfikacja kolumna mają również zastosowanie do kolumna kluczy indeksu.

Zalecenia dotyczące projektowania

Ponowne zaprojektowanie ponownego zbudowania indeksów nie klastrowanych z indeksu duży rozmiar klucz, tak aby były tylko kolumny używane do wyszukiwania i wyszukiwań kolumny klucz.Sprawdź wszystkie pozostałe kolumny obejmujące kolumn nonkey kwerendy zawarte.W ten sposób będzie miał wszystkie kolumny potrzebne do pokrycia kwerendy, ale sam klucz indeksu jest małe i skuteczny.

Załóżmy na przykład, chcesz zaprojektować indeks obejmuje następującą kwerendę.

USE AdventureWorks;
GO
SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN N'98000' and N'99999';

Aby objąć kwerendy, każdej kolumna muszą być zdefiniowane w indeksie.Mimo, że wszystkie kolumny można zdefiniować jako kolumny klucz, rozmiar klucz byłoby 334 bajtów.Ponieważ jest tylko kolumny, które faktycznie używany jako kryterium wyszukiwania PostalCode Kolumna o długości bajtów 30, czy zdefiniować lepiej projekt indeksu PostalCode w kolumnie klucz i zawiera wszystkie pozostałe kolumny jako nonkey kolumny.

Poniższa instrukcja tworzy indeks z kolumnami dołączone do pokrycia kwerendy.

USE AdventureWorks;
GO
CREATE INDEX IX_Address_PostalCode       
ON Person.Address (PostalCode)       
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);       

Zagadnienia wydajności

Należy unikać dodawania zbędne kolumny.Dodawanie zbyt wiele kolumn indeksu, klucz lub nonkey, może mieć następujący wpływ na wydajność:

  • Mniej wierszy w indeksie zmieści się strona.To może utworzyć zwiększa We/Wy i zmniejsza wydajność pamięci podręcznej.

  • Więcej miejsca na dysku wymagane będzie przechowywany indeks.W szczególności Dodawanie varchar(max), nvarchar(max), varbinary(max), lub xml typy danych jako kolumny indeksu nonkey może znacznie zwiększyć wymagania dotyczące miejsca na dysku. Dzieje się tak, ponieważ wartości kolumna są kopiowane na poziomie poziom liścia indeksu.Dlatego są one przechowywane w indeksu i tabela bazowa.

  • Konserwacja indeks może zwiększyć czas wykonywania modyfikacji, wstawia, aktualizacji lub usuwania, do tabela podstawowej lub w widoku indeksowanym.

Należy określić, czy wzrost wydajności kwerendy przewyższają mają wpływ na wydajność podczas modyfikacji danych i wymagania dotyczące miejsca na dysku dodatkowe.Aby uzyskać więcej informacji na temat oceny wydajności kwerendy Zobacz Query Tuning.