Udostępnij za pośrednictwem


Utwórz indeks instrukcjach przy użyciu brakujące informacje indeksu

Ten temat zawiera wskazówki dotyczące i przykłady użycia informacji zwracanych przez brak indeksy funkcji składników do pisania instrukcji CREATE INDEX dla brakujących indeksów.

Kolejność kolumn w sprawozdaniach INDEKSU tworzenie

Składniki Brak indeksy funkcja listy równości, nierówności i uwzględnionych kolumn w ich produkcji.

Na przykład, Showplan XML MissingIndexes wskazuje, czy kolumna klucz indeksu jest używany dla równości (=) lub nierówność (<, >i tak dalej) w Transact-SQL predykat instrukcja lub znajduje się tylko na pokrycie kwerendy.Wyświetla te informacje jako jedną z następujących wartości Usage atrybut ColumnGroup podelement:

<ColumnGroup Usage="EQUALITY">

<ColumnGroup Usage="INEQUALITY">

<ColumnGroup Usage="INCLUDE">

Obiekty dynamiczne zarządzanie sys.dm_db_missing_index_details i sys.dm_db_missing_index_columns zwracają wyniki, które wskazują, czy kolumna klucz indeksu jest równość, nierówności czy dołączone kolumny.Zestaw wyników sys.dm_db_missing_index_details zwraca informacje w equality_columns, inequality_columns, i included_columns kolumny.zestaw wyników Zwrócone 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 wyjściowego brakuje składnika funkcji indeksów, użyj następujących wytycznych:

  • Pierwsza lista kolumn równości (skrajnej lewej kolumna na liście).

  • Lista kolumn nierówność po kolumny równości (po prawej stronie kolumny równości wyświetlane).

  • Na liście Dołącz kolumn w klauzula Dołącz instrukcja CREATE INDEX.

  • Aby określić skuteczne kolejność kolumn równości, zamówić oparte na ich selektywności; oznacza to, że listę wyselekcjonowanych kolumn.

Przykłady

Korzystanie z danych wyjściowych z elementu XML Showplan MissingIndexes

Brak funkcji indeksy wykorzystuje optymalizator kwerendy generuje automatycznie optymalizuje kwerendę, gdy informacje.Jednakże kwerendy musi być najpierw wykonane w wystąpienie z SQL Server Tak Optymalizator można wygenerować ten brak informacji indeksu.

Poniższy przykład ilustruje tworzenie instrukcja Data Definition Language (DDL) z informacji zwracanych przez MissingIndexes element:

  1. Włączenie funkcji XML Showplan za pomocą SET STATISTICS XML ON opcję i wykonać następujące kwerendy przeciwko AdventureWorks2008R2 przykładowej bazy danych:

    USE AdventureWorks2008R2;
    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świetlanie wyników zwracanych w MissingIndexes elementu Showplan, który jest wytwarzany:

    <MissingIndexes>

      <MissingIndexGroup Impact="95.8296">

        <MissingIndex Database="[AdventureWorks2008R2]" 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. Tworzenie indeksu brakujących przy użyciu informacji zwracanych w MissingIndex i ColumnGroup elementów zapisać CREATE INDEX instrukcja DDL w następujący sposób:

    USE AdventureWorks2008R2;
    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
    

    To CREATE INDEX bazy danych używa instrukcja (USE AdventureWorks2008R2), schemat i nazwa tabela (ON Sales.SalesOrderHeader) wymienionych w MissingIndex elementu.Używa także kolumny wyświetlane dla każdego ColumnGroup podelement dla kolumny klucz (TerritoryID, ShipMethodID, SubTotal, Freight) i kolumnami (INCLUDE (SalesOrderNumber, CustomerID)).

Korzystanie z wyniki zwróconych przez obiekt dynamicznego zarządzania

Przed można pobrać brakujące informacje indeksu, należy wykonać kwerendy dla wystąpienie SQL Server Tak, aby optymalizator kwerendy można generować brakujące informacje indeksu.

Poniższy przykład ilustruje tworzenie instrukcja DDL z informacji zwracanych przez sys.dm_db_missing_index_details dynamiczny widok zarządzania.

  1. Wykonanie następującej kwerendy przeciwko AdventureWorks2008R2 przykładowej bazy danych:

    USE AdventureWorks2008R2;
    GO
    SELECT City, StateProvinceID, PostalCode
    FROM Person.Address
    WHERE StateProvinceID = 9;
    GO
    
  2. Wykonanie następującej kwerendy przeciwko sys.dm_db_missing_index_details dynamiczny widok zarządzania:

    SELECT *
    FROM sys.dm_db_missing_index_details
    

    Badania w tym 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]

NULL

[Miasto] [KodPocztowy]

[AdventureWorks].[Osoba].[Adres]

  1. Po badanie sys.dm_db_missing_index_details dynamiczny widok zarządzania brakuje indeksu można utworzyć za pomocą informacji zwrotnych w equality_columns, included_columns, i statement kolumn w następujący sposób:

    USE AdventureWorks2008R2;
    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 zostały zwrócone w sys.dm_db_missing_index_details zestaw wyników.Gdyby były one, czy lista tych kolumn po equality_columns.Kolumny, które są zwracane w included_columns zawsze są wymienione w klauzula Dołącz instrukcja CREATE INDEX.