Aracılığıyla paylaş


CREATE INDEX deyimleri yazma için eksik dizin bilgisi'ni kullanma

Bu konu için yönergeler içerir ve CREATE INDEX deyimi eksik dizin için yazma bileşenleri eksik dizinler tarafından verilen bilgileri kullanarak örnekleri özellik.

CREATE INDEX deyimleri sütunları sıralama

Eksik dizin bileşenleri, çıktıda sütunlar listesi eşitlik ve eşitsizlik özelliği.

Örneğin, XML gösterim planıMissingIndexes öğe gösteren bir dizin anahtar sütun eşitlik (=) ya da eşitsizlik (< > ve benzerleri) için kullanılan Transact-SQLdoðrulama deyim, ya da bir sorgu. Kapak yalnızca gelenBu bilgileri için aşağıdaki değerlerden biri olarak görüntülerKullanımColumnGroup alt öğesi özniteliği:

<ColumnGroup Usage="EQUALITY">

<ColumnGroup Usage="INEQUALITY">

<ColumnGroup Usage="INCLUDE">

Dinamik yönetim nesnelerisys.dm_db_missing_index_details sonuçlar bir dizin anahtar sütunu olan eşitsizlik, eşitlik veya bulunan sütun. ve sys.dm_db_missing_index_columns iade Sonucu küme,sys.dm_db_missing_index_detailsequality_columnsinequality_columns ve included_columns sütunları. bu bilgileri verir. Tarafından döndürülen sonuç kümesisys.dm_db_missing_index_columns , column_usage sütunun. bu bilgileri döndürür

Eksik dizin özelliği bileşen çıktısı yazdığınız CREATE INDEX deyimi sütun sırası aşağıdaki yönergeleri kullanın:

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

  • Sonra (sağda listelenen eşitlik sütunların) eşitlik sütunları eşitsizlik sütunları listeler.

  • CREATE INDEX INCLUDE yan tümcesinde içer sütunları liste deyim.

  • Eşitlik sütunlar, sipariş için etkili bir sırasını belirlemek için değil kendi selectivity; bunlara göre en seçmeli sütunlar listenin ilk.

Örnekler

XML gösterim planı MissingIndexes öğesi çıktısı kullanma

Eksik dizin özelliğini sorgu en iyi duruma getirir, sorgu iyileştirici otomatik olarak oluşturur ve bilgileri yararlanır.Ancak, sorgular gereken ilk yürütülen örneğindeSQL Serverböylece en iyi duruma getiricisi oluşturur bu eksik dizin bilgileri.

Tarafından döndürülen bilgiler bir veri tanımlama dili (DDL) deyim oluşturmak için aşağıdaki örnekte gösterilmektedirMissingIndexesöğesi:

  1. Açın XML gösterim planı özelliği küme STATISTICS XML açık seçeneğini kullanarak ve aşağıdaki sorgu karşıAdventureWorks örnek veritabanı:

    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. Dönen çıktısında görüntülemekMissingIndexes öğesi üretilen gösterim planı:

    <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. Döndürülen bilgileri kullanarak eksik dizin oluşturmaMissingIndex ve ColumnGroup öğeleri bir CREATE INDEX DDL yazma deyim gibi:

    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
    

    Bu CREATE INDEX deyimini kullanan veritabanı ( USE AdventureWorks), şema ve tablo adı ( ON Sales.SalesOrderHeader) listelenenMissingIndex öğesi. Ayrıca listelenen her sütunları kullanırColumnGroup alt öğesi için anahtar sütunları ( TerritoryID, ShipMethodID, SubTotal, Freight) olmayan bir sütun ( INCLUDE (SalesOrderNumber, CustomerID)).

sonuçlar kullanarak dinamik Yönetim nesne tarafından döndürülen

Eksik dizin bilgilerini almak önce gerekir yürütmek örneğinde sorgularıSQL Serverböylece sorgu iyileştirici oluşturmak eksik dizin bilgileri.

Aşağıdaki örnek, bir DDL oluşturulacağını gösterir deyim döndürülen bilgisys.dm_db_missing_index_details Dinamik yönetim görünümü.

  1. yürütmek aşağıdaki sorgu karşıAdventureWorks örnek veritabanı:

    USE AdventureWorks;
    GO
    SELECT City, StateProvinceID, PostalCode
    FROM Person.Address
    WHERE StateProvinceID = 9;
    GO
    
  2. Göre aşağıdaki sorgusys.dm_db_missing_index_details Dinamik yönetim görünümü:

    SELECT *
    FROM sys.dm_db_missing_index_details
    

    Bu dinamik yönetim görünümü sorgulamak için 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]. [Person]. [adres]

  1. Sorgulama sonrasys.dm_db_missing_index_details Dinamik yönetim görünümü equality_columns , included_columns ve deyim sütunlar gibi verilen bilgileri kullanarak eksik dizin oluşturabilir:

    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
    

Bu örnekte, hiçbirinequality_columnssys.dm_db_missing_index_details sonuç kümesi. iade Olan, sonra bu sütunlar listesindeequality_columns.Sütunlar içinde iadeincluded_columns her zaman CREATE INDEX deyimini. INCLUDE yan tümcesinde listelenen