Udostępnij za pośrednictwem


Indeks z uwzględnionych kolumn

Funkcja ponownego zbudowania indeksów można rozszerzać, dodając kolumnami, aby poziom liścia poziom indeks nieklastrowany.Przy tym kolumnami, można utworzyć zbudowania indeksów, które obejmują więcej kwerend.Wynika to z kolumnami mają następujące zalety:

  • Typy danych nie są dozwolone jako indeks może być klucz kolumny.

  • Nie są uważane za przez Aparat baz danych podczas obliczania numer indeksu kolumny klucz lub indeks klucz rozmiar.

Indeks z kolumnami nie będącymi uwzględnione może znacznie poprawić wydajność kwerendy podczas wszystkich kolumn w kwerendzie są uwzględniane w indeksie albo jako klucz lub kolumnami.Wzrost wydajności zostaną osiągnięte, ponieważ optymalizator kwerendy można znaleźć wszystkie kolumna wartości indeksu; Indeks klastrowany danych lub tabela nie jest używana w mniej operacji do dysku.

Ostrzeżenie

Gdy indeks zawiera wszystkie kolumny odwołuje się kwerenda on jest zwykle określany jako obejmujące kwerendy.

Gdy kolumny kluczy są przechowywane na wszystkich poziomach indeksu, kolumnami są przechowywane tylko w poziom liścia poziom.Aby uzyskać więcej informacji o poziomach indeksu, zobacz Organizacji indeksu i tabeli.

Aby uniknąć ograniczenia rozmiaru przy użyciu uwzględnionych kolumn

Można dołączyć kolumnami w indeks nieklastrowany , aby uniknąć przekroczenia ograniczeń bieżącego rozmiaru indeksu maksymalnie 16 kolumn klucz i indeks maksymalny rozmiar klucz 900 bajtów. Aparat baz danych Nie uzna kolumnami podczas obliczania numer indeksu kolumny klucz lub indeks klucz rozmiar.

Na przykład załóżmy, że chcesz indeksować następujące kolumny w Document tabela w AdventureWorks2008R2 przykładowej bazy danych:

     Title nvarchar(50)

     Revision nchar(5)

     FileName nvarchar(400)

Ponieważ nchar i nvarchar typów danych wymagają 2 bajtów dla każdego znaku, indeks, który zawiera trzy kolumny te przekroczyłaby limit rozmiaru 900 bajtów 10 bajtów (455 * 2).Za pomocą INCLUDE klauzula CREATE INDEX instrukcja, indeks klucz może być zdefiniowany jako (Title, Revision) i FileName zdefiniowana kolumna nonkey.W ten sposób rozmiar klucz indeksu byłoby 110 bajtów (55 * 2) i indeks nadal będzie zawierać wszystkie wymagane kolumny.Poniższa instrukcja tworzy takiego indeksu.

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

Indeks z wytycznymi dołączone kolumny

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

  • Kolumnami są określone w klauzula Dołącz instrukcja CREATE INDEX.

  • Kolumnami można zdefiniować tylko na zbudowania indeksów na tabele lub widoki indeksowane.

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

  • Obliczane kolumny, które są przewidywalne i dokładne lub niedokładny może być uwzględnionych kolumn.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów kolumny obliczanej.

  • Podobnie jak w przypadku kolumn klucz kolumna obliczanas pochodzące z image, ntext, i text typów danych może być (włączone) kolumnami tak długo, jak kolumna obliczana typ danych jest dozwolone jako kolumna indeksu nonkey.

  • Nie można określić nazwy kolumn na liście DOŁĄCZANIA i liście Kolumna klucz.

  • Nazwy kolumn nie można powtarzać do listy DOŁĄCZANIA.

Informacje dotyczące rozmiaru kolumny

  • Musi być zdefiniowany co najmniej jedną kolumna klucz.Maksymalna liczba kolumnami jest 1023 kolumn.Jest to maksymalna liczba kolumn tabela minus 1.

  • Kolumny kluczy indeksu, z wyłączeniem nonkeys, należy wykonać istniejące ograniczenia rozmiaru indeksu maksymalnie 16 kolumn klucz i indeks całkowity rozmiar klucz 900 bajtów.

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

Wytyczne modyfikacja kolumny

Podczas modyfikowania kolumny tabela, która została zdefiniowana jako kolumna uwzględnione dotyczą następujące ograniczenia:

  • Kolumnami nie można usunąć z tabela, chyba że najpierw przerwaniu indeksu.

  • Nie można zmienić kolumnami z wyjątkiem wykonać następujące czynności:

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

    • Zwiększenie długości varchar, nvarchar, lub varbinary kolumny.

      Ostrzeżenie

      Te ograniczenia modyfikacji kolumn stosuje się także do indeksu klucz kolumna.

Projekt zalecenia

Ponowne zaprojektowanie zbudowania indeksów nie klastrowanych z indeksu duży rozmiar klucz, tak, aby tylko kolumny używane do wyszukiwania i wyszukiwania są kolumny klucz.Sprawdź wszystkie kolumny, obejmujące kwerendy uwzględnione kolumnami.W ten sposób będzie miał wszystkie kolumny potrzebne do pokrycia kwerendy, ale indeks klucz jest mały i skuteczny.

Załóżmy, że chcesz zaprojektować indeks obejmuje następujące kwerendy.

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

Na pokrycie kwerendy, każda kolumna musi być zdefiniowana w indeksie.Chociaż wszystkie kolumny można zdefiniować jako kolumny klucz, rozmiar klucz byłoby 334 bajtów.Ponieważ jest tylko kolumny faktycznie używane jako kryteria wyszukiwania PostalCode kolumny o długości 30 bajtów definiowaniu lepiej projekt indeksu PostalCode jako kolumna klucz i obejmują wszystkie kolumny jako kolumny nonkey.

Poniższa instrukcja tworzy indeks z uwzględnionych kolumn do pokrycia kwerendy.

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

Zagadnienia wydajności

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

  • Indeks mniej wierszy będą dopasowanie strona.Można utworzyć zwiększa We/Wy i obniżona wydajność pamięci podręcznej.

  • Wymaga więcej miejsca na dysku do przechowywania indeksu.W szczególności, dodając varchar(max), nvarchar(max), varbinary(max), lub xml typów danych jako kolumny nonkey indeksu może znacznie zwiększyć wymagania dotyczące miejsca na dysku.Ponieważ wartości kolumna są kopiowane do indeksu jest poziom liścia poziom.Dlatego znajdują się one w indeksu i tabela bazowa.

  • Konserwacja indeksu może zwiększyć czas potrzebny do wykonania do modyfikacji, wstawia, aktualizacji lub usuwania, tabela źródłowa lub indeksowany widok.

Należy określić, czy wzrost wydajności kwerendy przeważyć wpływają na wydajność podczas modyfikacji danych i wymagania dotyczące miejsca na dysku.Aby uzyskać więcej informacji dotyczących oceny wydajności kwerendy, zobacz Dostrojenie kwerendy.