Aracılığıyla paylaş


create INDEX deyimleri yazma için eksik dizin bilgisi kullanma

Bu konu için yönergeler içerir ve bileşenler eksik dizinler için create INDEX deyimleri yazma için eksik dizin tarafından döndürülen bilgileri kullanarak örnekleri özellik.

create INDEX deyimleri sütunları sıralama

Bileşenler eksik dizinlerin listesi eşitlik, eşitsizlik ve çıktıları dahil sütunlarda özellik.

Örneğin, xml Showplan MissingIndexes öğesini belirtir bir dizin anahtar olup olmadığını sütun eşitlik (=) ya da eşitsizlik için kullanılır (<, >ve benzeri), Transact-SQL deyim yüklemi veya yalnızca sorgu. kapak dahilBu bilgiler için aşağıdaki değerlerden biri olarak görüntüler Usage öznitelik, ColumnGroup alt öğesi:

<ColumnGroup Usage="EQUALITY">

<ColumnGroup Usage="INEQUALITY">

<ColumnGroup Usage="INCLUDE">

Dinamik yönetimi nesneleri sys.dm_db_missing_index_details ve sys.dm_db_missing_index_columns dönmek sonuçlar belirten bir dizin anahtar sütunu bir eşitlik, eşitsizlik veya içerdiği sütun. olupsonuç küme , sys.dm_db_missing_index_details Bu bilgileri döndürür equality_columns, inequality_columns, ve included_columns sütunlar.Tarafından döndürülen sonuç küme sys.dm_db_missing_index_columns Bu bilgileri verir, column_usage sütun.

create INDEX deyimi eksik dizinler özelliği bileşen çıktısı yazma sütunları verme için aşağıdaki yönergeleri kullanın:

  • Listenin ilk eşitlik sütunları (sütun listesinde en soldaki).

  • Eşitlik sütunlar (sağda listelenen eşitlik sütunlar) sonra eşitsizliği sütunları listeler.

  • create INDEX deyim INCLUDE yan tümce tümce tümcesinde içerme sütunları listeler.

  • Eşitlik sütunlar için etkili bir sırasını belirlemek için bunları kendi meydana üzerinde temel alan sipariş; diğer bir deyişle, en Seçici sütun listesi.

Örnekler

xml Showplan MissingIndexes öğesi çıktısı kullanma

Eksik dizinler özelliği, bilgi, yararlanır sorgu iyileştiricisi bir sorgu en iyi duruma getirir, otomatik olarak oluşturur.Ancak, sorgular ilk örnek üzerinde yürütülmelidir SQL Server şekilde en iyi duruma getiricisi üretebilir bu eksik dizin bilgilerini.

Aşağıdaki örnek tarafından döndürülen bilgiler bir veri tanımlama dili (ddl) deyim oluşturmak nasıl gösterir MissingIndexes öğesi:

  1. xml Showplan özelliği kullanarak açmak SET STATISTICS XML ON seçeneğini ve aşağıdaki sorgu yürütmek AdventureWorks2008R2 örnek veritabanı:

    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. Döndürülen çıkış görüntülemek MissingIndexes üretilen Showplan öğesi:

    <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. Döndürülen bilgileri kullanarak eksik dizin oluşturma MissingIndex ve ColumnGroup öğeleri yazmak için bir CREATE INDEX ddl deyim aşağıdaki gibi:

    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
    

    Bu CREATE INDEX deyim veritabanı kullanır (USE AdventureWorks2008R2), şema ve tablo adı (ON Sales.SalesOrderHeader)'de listelenen MissingIndex öğesi.Ayrıca her biri için listelenen sütunlar kullanır ColumnGroup anahtar sütunlarının alt öğesi (TerritoryID, ShipMethodID, SubTotal, Freight) ve anahtar olmayan sütunlarla (INCLUDE (SalesOrderNumber, CustomerID)).

Kullanarak sonuçlar dinamik yönetimi nesne tarafından döndürülen

Eksik dizin bilgilerini almadan önce örneği üzerinde sorgu yürütmesi gerekiyor SQL Server , sorgu iyileştiricisi oluşturabilir eksik dizin bilgilerini.

Aşağıdaki örnek tarafından döndürülen bilgilerden ddl deyim oluşturulması gösterilmiştir sys.dm_db_missing_index_details Dinamik yönetim görünümü.

  1. Aşağıdaki sorgu karşı AdventureWorks2008R2 örnek veritabanı:

    USE AdventureWorks2008R2;
    GO
    SELECT City, StateProvinceID, PostalCode
    FROM Person.Address
    WHERE StateProvinceID = 9;
    GO
    
  2. Aşağıdaki sorgu karşı sys.dm_db_missing_index_details Dinamik yönetim görünümü:

    SELECT *
    FROM sys.dm_db_missing_index_details
    

    Bu sorgulama dinamik yönetim görünümü aşağıdaki sonuçlar verir:

index_handle

database_id

object_id

equality_columns

inequality_columns

included_columns

deyim

1

6

53575229

[StateProvince]

NULL

[Şehir], [PostaKodu]

[AdventureWorks].[Kişi].[Adres]

  1. Sorgulama sonrasında sys.dm_db_missing_index_details Dinamik yönetim görünümü oluşturup eksik dizin içinde döndürülen bilgileri kullanarak equality_columns, included_columns, ve statement Sütunlar aşağıdaki gibi:

    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
    

Bu örnekte, hiçbir inequality_columns , döndürülen sys.dm_db_missing_index_details sonuç küme.Bunlar olsaydı, sonra bu sütunlar listesi equality_columns.İçinde döndürülen sütunlar included_columns her zaman listelenen INCLUDE yan tümce tümce tümce, create INDEX deyim.