Using Missing Index Information to Write CREATE INDEX Statements
W tym temacie zawarto wskazówki dotyczące i przykłady używania informacji, które jest zwracany przez indeksów brakujących funkcji składników do pisania instrukcji CREATE INDEX dla brakujących indeksów.
Kolejność kolumn w CREATE INDEX deklaracji
Składniki indeksów brakujących funkcji listy równości, nierówność i kolumny zawarte w swoich danych wyjściowych.
Na przykład plan wykonania XML MissingIndexes elementu wskazuje, czy to kolumna klucz indeksu jest używane dla równości (=) lub nierówność (< > i tak dalej) w Transact-SQL predykat instrukcja lub po prostu dołączono do pokrycia kwerendy. Wyświetla te informacje jako jedną z następujących wartości Sposób użycia atrybut ColumnGroup podelement:
<ColumnGroup Usage="EQUALITY">
<ColumnGroup Usage="INEQUALITY">
<ColumnGroup Usage="INCLUDE">
Dynamiczne zarządzanie obiektami sys.dm_db_missing_index_details and sys.dm_db_missing_index_columns zwracają wyniki umożliwia wskazanie, czy jest to kolumna klucz indeksu, równości, nierówność lub dołączone kolumny.Zestaw wyników sys.dm_db_missing_index_details zwraca te informacjeequality_columns, inequality_columns, and included_columns kolumny.Zestaw wyników zwróconych przez sys.dm_db_missing_index_columns zwraca te informacje w jej column_usage kolumna.
Do ustalania kolejności kolumn w instrukcji CREATE INDEX zapisu z brak wyniku składnika funkcji indeksów, użyj następujących wytycznych:
Lista pierwszych kolumn równości (po lewej stronie na liście kolumn).
Lista kolumn nierówność po kolumny równość (po prawej stronie kolumny równości wyświetlane).
Lista dołączanych kolumn w klauzula INCLUDE instrukcja CREATE INDEX.
Do określenia skutecznych zamówienia dla kolumn równości, kolejność ich na podstawie selektywności; czyli, najpierw wyświetlić listę najbardziej selektywnego kolumn.
Przykłady
Korzystanie z danych wyjściowych z elementu XML plan wykonania MissingIndexes
Brak funkcji indeksów wykorzystuje informacje, które optymalizator kwerendy generuje automatycznie podczas jej optymalizuje kwerendę.Jednak kwerendy musi być najpierw wykonane w wystąpienie z SQL Server tak, aby Optymalizator może wygenerować ten brakujące informacje o indeksach.
W poniższym przykładzie pokazano sposób tworzenia instrukcja definicja danych Language (DDL) na podstawie informacji zwracanych przez MissingIndexes element:
Włączenie funkcji plan wykonania XML przy użyciu opcji ON zestaw STATISTICS XML i wykonać następujące kwerendy przed AdventureWorks przykładowej bazy danych:
USE AdventureWorks; GO SET STATISTICS XML ON; GO SELECT CustomerID, SalesOrderNumber, SubTotal FROM Sales.SalesOrderHeader WHERE ShipMethodID > 2 AND SubTotal > 500.00 AND Freight < 15.00 AND TerritoryID = 5; GO
Wyświetlić zwrócone dane wyjściowe w MissingIndexes elementu plan wykonania, który jest wytwarzany:
<MissingIndexes>
<MissingIndexGroup Impact="95.8296">
<MissingIndex Database="[AdventureWorks]" Schema="[Sales]" Table="[SalesOrderHeader]">
<ColumnGroup Usage="EQUALITY">
<Column Name="[TerritoryID]" ColumnId="14" />
</ColumnGroup>
<ColumnGroup Usage="INEQUALITY">
<Column Name="[ShipMethodID]" ColumnId="17" />
<Column Name="[SubTotal]" ColumnId="21" />
<Column Name="[Freight]" ColumnId="23" />
</ColumnGroup>
<ColumnGroup Usage="INCLUDE">
<Column Name="[SalesOrderNumber]" ColumnId="8" />
<Column Name="[CustomerID]" ColumnId="11" />
</ColumnGroup>
</MissingIndex>
</MissingIndexGroup>
</MissingIndexes>
Utwórz indeks brakujące przy użyciu informacji zwracanych w Elementy MissingIndex i ColumnGroup do pisania instrukcja CREATE INDEX DDL w następujący sposób:
USE AdventureWorks; GO IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_SalesOrderHeader_TerritoryID') DROP INDEX IX_SalesOrderHeader_TerritoryID ON Sales.SalesOrderHeader; GO CREATE NONCLUSTERED INDEX IX_SalesOrderHeader_TerritoryID ON Sales.SalesOrderHeader (TerritoryID, ShipMethodID, SubTotal, Freight) INCLUDE (SalesOrderNumber, CustomerID); GO
Korzysta z tej instrukcja CREATE INDEX (bazy danychUSE AdventureWorks), schematu i (nazwa tabelaON Sales.SalesOrderHeader) na liście MissingIndex element.Użyto także wyświetlane dla każdej kolumny ColumnGroup podelement dla kolumny klucz (TerritoryID, ShipMethodID, SubTotal, Freight) i (nonkey kolumnINCLUDE (SalesOrderNumber, CustomerID)).
Korzystanie z wyniki zwróconych przez obiekt dynamicznego zarządzania
Zanim można pobierać brakujące informacje o indeksach, należy wykonać kwerendy w wystąpieniu SQL Server tak, że optymalizator kwerendy może generować brakujące informacje o indeksach.
W poniższym przykładzie pokazano sposób tworzenia instrukcja DDL na podstawie informacji zwracanych przez sys.dm_db_missing_index_details dynamiczny widok zarządzania.
wykonać następującej kwerendy przed AdventureWorks przykładowej bazy danych:
USE AdventureWorks; GO SELECT City, StateProvinceID, PostalCode FROM Person.Address WHERE StateProvinceID = 9; GO
wykonać następującej kwerendy przed sys.dm_db_missing_index_details dynamiczny widok zarządzania:
SELECT * FROM sys.dm_db_missing_index_details
Podczas badania tego dynamiczny widok zarządzania zwraca następujące wyniki:
index_handle |
database_id |
object_id |
equality_columns |
inequality_columns |
included_columns |
instrukcja |
---|---|---|---|---|---|---|
1 |
6 |
53575229 |
[StateProvince] |
WARTOŚCI NULL |
[Miasto], [KodPocztowy] |
[AdventureWorks]. [osoba]. [adres] |
Po podczas badania sys.dm_db_missing_index_details dynamicznego zarządzania widoku brakuje indeksu można utworzyć przy użyciu informacji, które są zwracane w equality_columns, included_columns, and Instrukcja kolumn w następujący sposób:
USE AdventureWorks; GO IF EXISTS (SELECT name FROM sys.indexes WHERE name = N'IX_PersonAddress_StateProvinceID') DROP INDEX IX_PersonAddress_StateProvinceID ON Person.Address; GO CREATE NONCLUSTERED INDEX IX_PersonAddress_StateProvinceID ON Person.Address (StateProvinceID) INCLUDE (City, PostalCode); GO
W tym przykładzie nie inequality_columns zwrócone w sys.dm_db_missing_index_details zestaw wyników.Jeśli zostały one, czy wyświetlić listę tych kolumn po equality_columns.Kolumny, które są zwracane w included_columns są zawsze wyświetlane w klauzula INCLUDE instrukcja CREATE INDEX.