Udostępnij za pośrednictwem


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:

  1. 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
    
  2. 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>

  3. 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.

  1. 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
    
  2. 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]

  1. 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.