INDIS (Transact-SQL) CREATE

Belirtilen tabloda veya belirtilen bir tablo görünüm ilişkili bir dizin oluşturur.Tablodaki verileri önce bir dizin oluşturulabilir.İlişkili dizinler, tam veritabanı adı belirterek tablo veya başka bir veritabanı görünümleri oluşturulabilir.

Not

Bir XML dizini oluşturma hakkında bilgi için bkz:XML INDIS (Transact-SQL) CREATE.Kayma bir dizin oluşturma hakkında bilgi için bkz:KAYMA INDIS (Transact-SQL) CREATE.

Topic link iconTransact-SQL sözdizimi kuralları

Create Relational Index 
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] ) 
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE <filter_predicate> ]
    [ WITH ( <relational_index_option> [ ,...n ] ) ]
    [ ON { partition_scheme_name ( column_name ) 
         | filegroup_name 
         | default 
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

[ ; ]

<object> ::=
{
    [ database_name. [ schema_name ] . | schema_name. ] 
        table_or_view_name
}

<relational_index_option> ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | DROP_EXISTING = { ON | OFF }
  | ONLINE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE} 
     [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
     [ , ...n ] ) ]
}

<filter_predicate> ::= 
    <conjunct> [ AND <conjunct> ]

<conjunct> ::=
    <disjunct> | <comparison>

<disjunct> ::=
        column_name IN (constant ,…)

<comparison> ::=
        column_name <comparison_op> constant

<comparison_op> ::=
    { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< }

<range> ::= 
<partition_number_expression> TO <partition_number_expression>


Backward Compatible Relational Index
Important   The backward compatible relational index syntax structure will be removed in a future version of SQL Server. Avoid using this syntax structure in new development work, and plan to modify applications that currently use the feature. Use the syntax structure specified in <relational_index_option> instead.

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column_name [ ASC | DESC ] [ ,...n ] ) 
    [ WITH <backward_compatible_index_option> [ ,...n ] ]
    [ ON { filegroup_name | "default" } ]

<object> ::=
{
    [ database_name. [ owner_name ] . | owner_name. ] 
        table_or_view_name
}

<backward_compatible_index_option> ::=
{ 
    PAD_INDEX
  | FILLFACTOR = fillfactor
  | SORT_IN_TEMPDB
  | IGNORE_DUP_KEY
  | STATISTICS_NORECOMPUTE 
  | DROP_EXISTING 
}

Bağımsız değişkenler

  • BENZERSİZ
    Bir tablo ya da görünüm üzerinde benzersiz dizin oluşturur.benzersiz dizin içinde iki satır aynı dizin anahtar değeri için izin verilen biridir.Bir görünüm üzerinde kümelenmiş dizin benzersiz olması gerekir.

    The Database Engine does not allow creating a unique index on columns that already include duplicate values, whether or not IGNORE_DUP_KEY is set to ON.Bu çalıştı,Database Enginegörüntüler bir hata iletisi.Yinelenen değerleri sütun veya sütunlar üzerinde benzersiz dizin oluşturulmadan önce kaldırılmalıdır.benzersiz dizin içinde kullanılan sütunlar için NOT ayarlanabilir benzersiz dizin oluşturulduğunda, birden çok null değer çoğaltma olarak kabul edilir çünkü NULL.

  • KÜMELENMİŞ
    Bir dizin, anahtar değerlerinin mantıksal sırası belirler karşılık gelen satırların fiziksel sırası oluşturur bir tablo.Alt veya yaprak, düzey, kümelenmiş dizin gerçek veri satırlarını içeren tablo.Bir tablo veya görünümü bir defada bir kümelenmiş dizin izin verilir.Daha fazla bilgi için bkz:Kümelenmiş dizin yapıları.

    Benzersiz kümelenmiş dizin içeren bir görünüm, dizinli görünüm olarak adlandırılır.Benzersiz kümelenmiş dizin fiziksel olarak bir görünüm oluşturmak için Görünüm materializes.Aynı görünüm üzerinde başka bir dizin tanımlı önce benzersiz kümelenmiş dizin bir görünüm oluşturulmalıdır.Daha fazla bilgi için bkz:Görünümleri tasarlama dizin.

    Kümelenmemiş bir dizin oluşturmadan önce kümelenmiş dizin oluşturun.kümelenmiş dizin oluşturulduğunda, tablolarda varolan kümelenmemiş dizinler yeniden oluşturulur.

    , Kümelenmiş belirtilmezse, bir kümelenmemiş dizin oluşturulur.

    Not

    Çünkü yaprak düzey kümelenmiş dizin ve veri sayfaları olan ON kümelenmiş dizin oluşturma ve tanımlama ile aynıpartition_scheme_nameya da açıkfilegroup_nameyan etkili bir şekilde hareket bir tablo gelen dosya grubunu, tablo yeni bir bölümleme düzeni veya dosya grubu. oluşturulanTablolar ve dizinler belirli dosya gruplarını oluşturmadan önce hangi dosya gruplarını kullanılabilir ve dizin için yeterli boş alan olduğunu doğrulayın.Daha fazla bilgi için bkz:Dizin disk alanı gereksinimlerini belirleme.

  • KÜMELENMEMİŞ
    Mantıksal sırası belirten bir dizin oluşturur bir tablo.Kümelenmemiş bir dizin ile veri satırların fiziksel sırası, dizin oluşturulmuş sıralarına bağımsızdır.Daha fazla bilgi için bkz:Kümelenmemiş dizin yapıları.

    Her tablonun dizinler nasıl oluşturulduğunu ne olursa olsun en fazla 999 kümelenmemiş dizinleri olabilir: birincil anahtar ve UNIQUE kısıtlamaları ile dolaylı veya açıkça CREATE INDEX. ile

    Dizin oluşturulmuş görünümler için benzersiz kümelenmiş dizin zaten tanımlı olan bir görünüm üzerinde kümelenmemiş dizinler oluşturulabilir.

    NONCLUSTERED varsayılandır.

  • index_name
    Dizin adıdır.Dizin adları tablo veya Görünüm içinde benzersiz olmalıdır, ancak veritabanı içinde benzersiz olması gerekmez.Dizin adları kuralları izleyin gerekirtanımlayıcılar.

  • column
    Dizin dayandığı sütun veya sütunları olduğu.Birleşik değerlerini belirtilen sütunlara bileşik dizin oluşturmak için iki veya daha fazla sütun adlarını belirtin.Sütunları sıralama önceliğini sırasıyla sonra parantez içinde bileşik dizin içerdiği listesitable_or_view_name.

    En çok 16 sütun içinde bir tek bileşik dizin anahtar birleştirilebilir.Bileşik dizin anahtar sütunları aynı olmalıdır tablo veya Görünüm.Birleştirilmiş dizin değeri izin verilen en büyük boyutu 900 bayttır.Değişken türü sütunlarda bileşik dizinler hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.

    Büyük nesne olan sütunlar (LOB) veri türlerintext,text,varchar(max), nvarchar(max),varbinary(max),xml, orimageanahtar sütunlar için bir dizin belirtilemezGörünüm tanımını da içeremezntext,text, orimagesütun olmasa bunlar değil başvurulan CREATE INDEX deyim.

    CLR üzerinde dizinler oluşturmak kullanıcı tanımlı tür ikili sıralama türünü destekliyorsa, sütun.Ayrıca yöntem etkinleştirilmelerinde kapatmak, kullanıcı tanımlı tür sütun olarak tanımlanan yöntemler belirli olarak işaretlenir ve veri erişim işlemlerini gerçekleştirmek sürece, hesaplanan sütunlar üzerinde dizinler oluşturabilirsiniz.CLR kullanıcı tanımlı türü sütunlar, dizin oluşturma hakkında daha fazla bilgi için bkz:CLR kullanıcı tanımlı türler.

  • [ASC | DESC]
    Artan veya azalan sıralama yönünü belirli dizin belirleyen sütun.ASC varsayılandır.

  • INCLUDE **(**column [ ,... n ] )
    Yaprak düzeyine eklenecek anahtar olmayan sütunu belirtir kümelenmemiş dizin.Benzersiz veya benzersiz olmayan kümelenmemiş dizin olabilir.

    Sütun adları ekleme listesine tekrar ve aynı anda hem anahtarı hem de anahtar olmayan sütunları olarak kullanılamaz.Kümelenmemiş dizinleri her zaman içermiyorsa kümelenmiş dizin sütunları kümelenmiş bir dizin tanımlanan tablo.Daha fazla bilgi için bkz:Içerilen sütunları içeren dizin.

    Tüm veri türleri dışında izin verilirtext,ntext, veimage.Dizini oluşturulmuş olmalı veya yeniden çevrimdışı (çevrimiçi = OFF) belirtilen anahtar olmayan sütunu biri olup olmadığınıvarchar(max),nvarchar(max), orvarbinary(max)veri türü.

    Hesaplanan sütunlar, belirli ve kesin ya da imprecise sütunlar olabilir.Computed tarafından türetilmiş sütunlarimage,ntext,text,varchar(max),nvarchar(max),varbinary(max), andxmlveri türleri eklenebilir anahtar olmayan sütunlar olarak hesaplanan sütun veri türleri izin verilen gelen bir sütun.Daha fazla bilgi için bkz:Hesaplanan sütunlar üzerinde dizin oluşturma.

    Bir XML dizini oluşturma hakkında bilgi için bkz:XML INDIS (Transact-SQL) CREATE.

  • WHERE filter_predicate < >
    Dizine eklemek için hangi satırların belirleyerek Filtre uygulanmış bir dizin oluşturur.Filtre uygulanmış dizinin, tabloda kümelenmemiş bir dizin olmalıdır.Filtre uygulanmış veri satırları istatistikleri filtre uygulanmış dizin oluşturur.

    Filtre kullanan basit bir karşılaştırma mantığı yüklemi ve hesaplanan bir sütun, UDT sütun, bir uzamsal veri türü sütununu veya hierarchyID veri başvuramaz türü sütun.Karşılaştırma işleçleri ile karşılaştırma NULL harfleri kullanarak izin verilmez.IS NULL ve IS NOT NULL işleçleri kullanın.

    Filtre koşullarına Production.BillOfMaterials yönelik bazı örnekler aşağıda tablo:

    WHERE StartDate > '20000101' AND EndDate <= '20000630'

    WHERE ComponentID IN (533, 324, 753)

    WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL

    Filtre uygulanmış dizinleri XML dizinler ve tam metin dizinleri için geçerli değildir.UNIQUE dizinler benzersiz dizin değerleri yalnızca seçili satırları olmalıdır.Filtre uygulanmış dizinler IGNORE_DUP_KEY seçeneği izin vermiyor.

  • ON partition_scheme_name**(column_name)**
    Dosya grupları ', üzerine tanımlayan bölümleme düzeni belirler bölümlerini bir bölümlenmiş dizin eşleştirilir.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME.column_name specifies the column against which a partitioned index will be partitioned.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using.column_name is not restricted to the columns in the index definition.Herhangi bir temel tablo sütun belirtilebilir, UNIQUE bir dizin, bölümleme dışındacolumn_namegereken seçilen arasından kullanılan benzersiz anahtar.Bu kısıtlama sağlayanDatabase Engineyalnızca tek bir bölüm içindeki anahtar değerleri benzersizliğini doğrulamak için.

    Not

    Benzersiz olmayan, kümelenmiş bir dizin bölümü,Database Enginezaten belirtilmezse varsayılan bölümleme sütun, kümelenmiş dizin anahtarlarının listeye ekler.Benzersiz olmayan, kümelenmemiş dizin böldüğünüzdeDatabase Enginezaten belirlediyseniz, bölümleme sütun bir dizin, anahtar olmayan (dahil) sütun olarak ekler.

    Ifpartition_scheme_nameorfilegroupbelirtilmezse ve tablo bölümlenmiş, aynı dizine yerleştirilir bölümleme düzeni, aynı bölümleme sütun kullanarak temel alınan tablonun.

    Not

    Bir bölümleme şeması üzerinde XML dizin belirtilemez.Temel tablo bölümlere ayrılmışsa, XML dizin tablo olarak aynı bölümleme düzeni kullanır.Bir XML dizini oluşturma hakkında bilgi için bkz:XML INDIS (Transact-SQL) CREATE.

    Bölümleme dizinler hakkında daha fazla bilgi için bkz:Bölümlenmiş dizinler için özel yönergeleri.

  • ONfilegroup_name
    Belirtilen dizin belirtilen dosya grubu oluşturur.Hiçbir yeri belirlenir ve tablo veya Görünüm yok bölümlere, dizin temel alınan tablo veya Görünüm aynı dosya grubu kullanır.dosya grubu bulunması gerekir.

  • ON**"default"**
    Create belirtilen dizini varsayılan dosya grubu.

    Bu bağlamda terimi varsayılan anahtar değil.It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default].QUOTED_IDENTIFIER seçeneği "varsayılan" belirtilmezse, geçerli oturum için açık olması gerekir.Bu, varsayılan ayardır..Daha fazla bilgi için bkz:küme QUOTED_IDENTIFIER (Transact-SQL).

  • FILESTREAM_ON { filestream_filegroup_name| partition_scheme_name| "NULL"}]
    FILESTREAM veri yerleşimini belirtir tablo kümelenmiş dizin oluşturulduğunda.FILESTREAM_ON yan tümce FILESTREAM verileri farklı bir FILESTREAM dosya grubu veya bölümü şeması taşınacak.

    filestream_filegroup_name FILESTREAM dosya grubu adıdır.dosya grubu kullanarak dosya grubu için tanımlanan bir dosya olmalıdır birCREATE DATABASE veya ALTER DATABASE deyim; aksi halde, bir hata ortaya çıkar.

    Tablo bölümlere ayrılmışsa, the FILESTREAM_ON yan tümce dahil olması ve FILESTREAM dosya gruplarını bölümü ile aynı işlev ve bölüm sütunları Tablo için bölümleme düzeni olarak kullanan bir bölümleme düzeni belirtmelisiniz.Aksi takdirde hata oluşur.

    tablo İse bölümlenmiş değil, FILESTREAM sütun bölümlenmesi olamaz.Tablo için veri FILESTREAM FILESTREAM_ON yan tümcesinde belirtilen tek bir dosya grubu depolanması gerekir.

    FILESTREAM_ON null belirtilebilir CREATE INDEX deyimi içinde kümelenmiş dizin oluşturulursa, tablo FILESTREAM sütun içermiyor.

    FILESTREAM konuları listesi için bkz:Tasarlama ve FILESTREAM depolama uygulama.

<nesne>::=

Dizini oluşturulacak tam veya nonfully nitelikli nesnedir.

  • database_name
    Veritabanının adıdır.

  • schema_name
    Hangi şema adı tablo veya görünüme ait.

  • table_or_view_name
    Tablo veya Görünüm sıralanacak adıdır.

    Görünüm üzerinde bir dizin oluşturmak için SCHEMABINDING ile tanımlanması gerekir.Önce herhangi bir görünümde benzersiz kümelenmiş dizin oluşturulmalıdır kümelenmemiş dizin oluşturulur.Dizin oluşturulmuş görünümler hakkında daha fazla bilgi için Açıklamalar bölümüne bakın.

<relational_index_option>::=

Dizin oluştururken kullanılacak seçenekleri belirtir.

  • PAD_INDEX = {AÇIK | KAPALI}
    Dizin doldurma belirtir.Varsayılan değer kapalı'dır.

    • AÇIK
      Yüzde olarak belirtilen boş alanfillfactoruygulandığını ara düzeyinde sayfalara dizin.

    • KAPALI veya fillfactorbelirtilmemiş
      Ara düzey sayfalar için kapasite yakınında doldurulur, en büyük boyutu en az bir satır için yeterli alanı bırakma dizini, küme anahtar ara sayfalarında ele olabilir.

    Yalnızca FILLFACTOR belirtildiğinde PAD_INDEX FILLFACTOR tarafından belirtilen yüzde kullandığından, PAD_INDEX seçenek kullanışlı olur.FILLFACTOR için belirtilen yüzde bir satır için izin vermek için yeterince büyük değilse,Database Enginedahili olarak geçersiz kılar yüzde izin verilecek en az.Satır, bir ara dizin sayfa az iki, nasıl düşük değeri ne olursa olsun hiçbir zaman isefillfactor.

    İle PAD_INDEX ile PAD_INDEX için geriye doğru uyumlu sözdiziminde eşdeğerdir = ON.

  • FILLFACTOR **=**fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or rebuild.fillfactor must be an integer value from 1 to 100.Varsayılan 0'dur.Iffillfactor100 ya da 0,Database EngineYaprak sayfa kapasitesi. dolu bir dizin oluşturur

    Not

    doldurma faktörü değerleri 0 ile 100, tüm bakımdan aynıdır.

    Yalnızca dizin oluşturulduğunda yeniden veya FILLFACTOR ayar uygulanır.The Database Engine does not dynamically keep the specified percentage of empty space in the pages.doldurma faktörü ayarını görüntülemek içinsys.indexes Katalog görünümü.

    Important noteImportant Note:

    Bir FILLFACTOR ile kümelenmiş dizin oluşturma 100'den daha az veri kapladığı için depolama alanı miktarını etkilerDatabase Engineyeniden dağıtan verileri, oluşturduğu kümelenmiş dizin.

    Daha fazla bilgi için bkz:Faktörü girin..

  • SORT_IN_TEMPDB = {AÇIK | KAPALI}
    Geçici sıralama sonuçlar saklamak verip belirtirtempdb.Varsayılan değer kapalı'dır.

    • AÇIK
      Dizin oluşturmak için kullanılan ara sıralama sonuçlar saklanırtempdb.Bu azaltmak, bir dizin oluşturmak için gereken saattempdb olan bir farklı küme kullanıcı veritabanında. ' dan disk Ancak, bu dizin oluşturma sırasında kullanılan disk alanı miktarını artırır.

    • Kapalı
      Ara sıralama sonuçlar aynı dizin veritabanında depolanır.

    Alanın yanında, dizin oluşturmak için veritabanında gerekliusertempdb Orta sıralama sonuçlar. tutmak için ek alan aynı miktarda hakkında olmalıdır. Daha fazla bilgi için bkz:tempdb ve dizin oluşturma.

    İle SORT_IN_TEMPDB ile SORT_IN_TEMPDB için geriye doğru uyumlu sözdiziminde eşdeğerdir = ON.

  • IGNORE_DUP_KEY = {AÇIK | KAPALI}
    Yinelenen anahtar değerleri benzersiz dizin eklemek bir ekleme işlemi çalıştığında hata yanıtını belirtir.IGNORE_DUP_KEY seçeneği, yalnızca dizin oluşturulan veya yeniden operasyonunu eklemek için geçerlidir.Etkisi, yürütme seçeneği vardırCREATE INDEX, ALTER INDEX, or UPDATE.Varsayılan değer kapalı'dır.

    • AÇIK
      Yinelenen anahtar değerleri benzersiz dizin eklendiğinde uyarı iletisi oluşacaktır.Yalnızca benzersiz kısıtlamayı ihlal satırları başarısız olur.

    • Kapalı
      Yinelenen anahtar değerleri benzersiz dizin eklendiğinde, bir hata iletisi oluşur.Tüm ekleme işlemini geri alınır.

    IGNORE_DUP_KEY olamaz küme açık bir görünüm oluşturulmuş dizinleri, benzersiz olmayan dizinler, XML dizinler, kayma dizinler ve filtre uygulanmış bir dizin.

    IGNORE_DUP_KEY, görüntülemek için kullanınsys.indexes.

    İle IGNORE_DUP_KEY ile IGNORE_DUP_KEY için geriye doğru uyumlu sözdiziminde eşdeğerdir = ON.

  • STATISTICS_NORECOMPUTE = { ON | OFF}
    Dağılım istatistiklerini recomputed olup olmadığını belirtir.Varsayılan değer kapalı'dır.

    • AÇIK
      Güncel olmayan istatistikler otomatik olarak recomputed değil.

    • Kapalı
      Otomatik istatistik güncelleştirme etkinleştirilir.

    Otomatik istatistik güncelleştirmek, geri yükleme yüklemek için küme için kapalı, STATISTICS_NORECOMPUTE veya güncelleştirme istatistikleri NORECOMPUTE yan tümce.

    Important noteImportant Note:

    Dağılım istatistiklerini, otomatik recomputation devre dışı bırakma, tablo ile ilgili sorguları için en uygun yürütme planları çekme gelen sorgu iyileştirici engelleyebilir.

    İle STATISTICS_NORECOMPUTE ile STATISTICS_NORECOMPUTE için geriye doğru uyumlu sözdiziminde eşdeğerdir = ON.

  • DROP_EXISTING = {AÇIK | KAPALI}
    Belirtilen, kümelenmiş ve kümelenmemiş preexisting bırakılan yeniden ve olduğunu belirtir.Varsayılan değer kapalı'dır.

    • AÇIK
      Varolan dizini bıraktı ve yeniden.Belirtilen dizin adı şu anda varolan bir dizini ile aynı olmalıdır; ancak, dizin tanımı değiştirilebilir.Örneğin, farklı sütunlar, sıralama düzeni, bölümün düzeni veya dizin seçeneklerini belirtebilirsiniz.

    • Kapalı
      Belirtilen dizin adı zaten varsa bir hata görüntülenir.

    Dizin türü kullanarak değiştirilemez DROP_EXISTING.

    İle DROP_EXISTING ile DROP_EXISTING için geriye doğru uyumlu sözdiziminde eşdeğerdir = ON.

  • ÇEVRİMİÇİ = {AÇIK | KAPALI}
    Temel tabloları ve ilişkili dizin sorguları ve veri değişikliği dizin işlemi sırasında kullanılabilir olup olmadığını belirtir.Varsayılan değer kapalı'dır.

    Not

    Çevrimiçi dizin işlemleri, yalnızca kullanılabilirSQL ServerEnterprise ve Developer, deneme sürümleri.

    • AÇIK
      Dizin işlemi süresince uzun süreli tablo kilitli tutulur.Ana dizin işlem aşamasında, kaynağı üzerinde yalnızca bir hedefi paylaşma (E) kilit tutulur tablo.Bu, sorgu veya temel alınan tablo ve devam etmek için dizin güncelleştirmelerini sağlar.İşlem başlangıcında, paylaşılan (S) kilit, kaynak nesnenin çok kısa bir saat için tutulur.saat, kısa bir saat için işlemi sonunda kümelenmemiş bir dizin oluşturulursa; kaynak S (paylaşılan) bir kilit alınan veya bir SCH-M (şema değişikliği) kilit, kümelenmiş dizin oluşturulduğunda veya çevrimiçi bıraktı ve bir küme veya kümelenmemiş dizin yeniden alındı.ÇEVRİMİÇİ olamaz küme yerel geçici tablo üzerinde bir dizin oluşturulduğunda açık.

    • Kapalı
      Tablo kilidi dizin işlemi süresince geçerli olur.Oluşturur, oluşturur, ya da düşünceye kümelenmiş dizin oluşturur veya kümelenmemiş bir dizin düşünceye çevrimdışı dizin işlemi bir şema değişikliği (Sch-M) kilit tablosundaki tutar.Bu temel için tüm kullanıcı erişimini engeller tablo işlemi süresince.Çevrimdışı dizin operasyonu kümelenmemiş bir dizin oluşturur (S) paylaşılan kilit tablosundaki tutar.Bu güncelleştirmeler için temel alınan tablo engeller, ancak SELECT deyimi gibi okuma işlemlerini sağlar.

    Daha fazla bilgi için bkz:Çevrimiçi'ne dizin işlem çalışma.Kilitler hakkında daha fazla bilgi için bkz:Kilit modu.

    Aşağıdaki özel durumlar ile çevrimiçi dizinler, global geçici tablolar, dizinler de dahil olmak üzere oluşturulabilir:

    • XML dizini.

    • Yerel geçici tablo dizin.

    • İlk benzersiz kümelenmiş dizin bir görünümde.

    • Kümelenmiş dizinleri devre dışı bırakılmış.

    • LOB veri türleri temel alınan tablo içeriyorsa, Clustered dizin: image,ntext,text,varchar(max),nvarchar(max),varbinary(max), andxml.

    • Kümelenmemiş dizin tanımlı LOB veri türü sütun.

      Not

      Benzersiz olmayan kümelenmemiş bir dizin tablo LOB veri türleri içerir, ancak bu sütunların hiçbiri dizin tanımı anahtar veya anahtar olmayan (içerilen) sütunu olarak kullanılan çevrimiçi oluşturulabilir.

    Daha fazla bilgi için bkz:Çevrimiçi ındex işlemi gerçekleştiriliyor.

  • ALLOW_ROW_LOCKS = {AÇIK | KAPALI}
    Satır kilitleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

    • AÇIK
      Satır kilitleri, dizine erişirken izin verilir.The Database Engine determines when row locks are used.

    • Kapalı
      Satır kilitleri kullanılır.

  • ALLOW_PAGE_LOCKS = {AÇIK | KAPALI}
    Sayfa kilitleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

    • AÇIK
      Dizine erişirken, sayfa kilitleri izin verilir.The Database Engine determines when page locks are used.

    • Kapalı
      Sayfa kilitleri kullanılır.

  • MAXDOP = max_degree_of_parallelism
    Geçersiz kılaren büyük ölçüde parallelism süresi boyunca dizin operasyon. yapılandırma seçeneği Bir paralel planı yürütme kullanılan işlemci sayısını sınırlamak için MAXDOP kullanın.En fazla 64 işlemci olur.

    max_degree_of_parallelism aşağıdaki gibi olabilir:

    • 1
      Paralel planı oluşturma bastırır.

    • >1
      Belirtilen veya daha az geçerli sistem yükünü bağlı bir paralel dizin işleminde kullanılan işlemci sayısı sınırlar.

    • 0 (varsayılan).
      İşlemci veya daha az geçerli sistem yükünü temel sayısını kullanır.

    Daha fazla bilgi için bkz:Parallel ındex işlemi yapılandırma.

    Not

    Paralel dizin işlemleri, yalnızca kullanılabilirSQL ServerEnterprise ve Developer, deneme sürümleri.

  • DATA_COMPRESSION
    Veri sıkıştırma seçeneği belirtilen dizin, bölüm numarası veya bölüm aralık belirtir.Seçenekler şunlardır:

    • Yok.
      Dizin veya belirtilen bölümleri sıkıştırılır değil.

    • SATIR
      Dizin veya belirtilen bölümleri satır sıkıştırması kullanılarak sıkıştırılır.

    • SAYFA
      Dizin veya belirtilen bölümleri sayfa sıkıştırması kullanılarak sıkıştırılır.

    Sıkıştırma, daha fazla bilgi için bkz:Sıkıştırılmış tablolar ve dizinler oluşturma.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    DATA_COMPRESSION ayarın uygulanacağı bölümlerini belirtir.Dizin bölümlenmiş, ON bölüm bağımsız bir hata oluşturur.ON bölüm yan tümce DATA_COMPRESSION seçeneği bölümlenmiş bir dizinin tüm bölümlerini uygular, sağlanır.

    <partition_number_expression>aşağıdaki şekillerde belirtilebilir:

    • Sayısı için bir bölümü, örneğin sağlar: (2) BÖLÜMLERİNDEKİ.

    • Bölüm numaralarını aralarına virgül koyarak, örneğin birkaç ayrı ayrı bölümleri sağlar: (1, 5) BÖLÜMLERİNDEKİ.

    • Aralık hem de tek tek bölümler, örneğin sağlar: (2, 4, 6 TO 8) BÖLÜMLERİNDEKİ.

    <Aralık>için sözcüğü için ayrılmış bölüm numaraları olarak belirtilebilir: (6 8) BÖLÜMLERİNDEKİ.

    İçin küme veri sıkıştırma farklı bölümleri için farklı türde belirtmek DATA_COMPRESSION seçeneği birden fazla kez örnek:

    REBUILD WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    

Remarks

CREATE INDEX deyimini, herhangi bir sorgu gibi getirilmiştir.G/Ç işlemleri kaydetmek için query processor tarama bir tablo taraması yapmak yerine başka bir dizin seçebilirsiniz.Sıralama işlemi bazı durumlarda elemiş.Çok işlemcili bilgisayarlarda çalıştıranSQL Server 2005 Enterprise EditionorSQL Server 2008CREATE INDEX tarama gerçekleştirir ve sıralama işlemleri diğer sorguları do. aynı şekilde, dizin oluşturma ile ilgili daha fazla işlemci kullanınDaha fazla bilgi için bkz:Parallel ındex işlemi yapılandırma.

Dizin oluşturma işlemi, veritabanı kurtarma modeli ise en az kaydedilebilir küme ya da yığın-günlüklenen veya basit.Daha fazla bilgi için bkz:Indeks işlemleri için bir kurtarma modeli seçme.

Geçici tablo, dizin oluşturulabilir.Tablo kesilmeden veya oturum sona erer, dizinleri bırakılır.

Dizin, genişletilmiş özellikleri desteklemez.Daha fazla bilgi için bkz:Veritabanı nesneleri üzerinde genişletilmiş özellikleri'ni kullanma.

Kümelenmiş dizinler

Tablo (yığın) kümelenmiş dizin oluşturmak veya silmek ve varolan kümelenmiş dizin yeniden verileri sıralama yapabilmek için veritabanı ve geçici bir kopyasını özgün tablo veya varolan küme dizin verileri, kullanılabilir ek çalışma gerektirir.Daha fazla bilgi için bkz:Dizin disk alanı gereksinimlerini belirleme.Kümelenmiş dizinler hakkında daha fazla bilgi için bkz:Kümelenmiş dizin oluşturma.

Benzersiz dizinler

benzersiz dizin varsa,Database Enginebakar için yinelenen değerleri her saat veri eklenir bir ekleme işlemleri.Oluşturan yinelenen anahtar değerleri ekleme işlemlerini yeniden toplu veDatabase Enginegörüntüler bir hata iletisi.Bu ekleme işlemini çok sayıda değiştirir, ancak yalnızca bir kopyasını neden olsa bile geçerlidir.Hangi burada benzersiz dizin, IGNORE_DUP_KEY yan tümce için veri girme denemesi yapılırsa küme yalnızca ihlal benzersiz satırları başarısız ON olarak dizin.Benzersiz dizinler hakkında daha fazla bilgi için bkz:Benzersiz dizinler oluşturuluyor.

Bölümlenmiş dizinler

Bölümlenmiş bir dizin oluşturulur ve benzer şekilde bölümlenmiş tablolar için saklanır, ancak normal dizinler gibi bunlar ayrı veritabanı nesneleri olarak ele alınır.Bölümlenmiş bir dizine sahip olabilir bir tablo, değil bölümlenmiş ve nonpartitioned bir dizine sahip olabilir bir tablo bölümlenmiş.

Dizin oluşturma, bir bölümlenmiş tablo, bir dosya grubu, dizini yerleştirmek, dizin bölümlenmiş temel tabloyu aynı şekilde belirtin.Dizin, varsayılan olarak kendi temel tabloların aynı filegroups yerleştirilir ve aynı bölümleme sütunları kullanan bölümlenmiş bir tabloda aynı bölüm düzeninde budur.

Benzersiz olmayan, kümelenmiş dizin böldüğünüzdeDatabase Engineönceden belirtilmiş olması durumunda bölümleme tüm sütunları varsayılan olarak kümelenmiş dizin anahtar listesine ekler.

Dizin oluşturulmuş görünümler bölümlenmiş tabloları dizinleri tablolar üzerinde aynı şekilde oluşturulabilir.Bölümlenmiş dizinler hakkında daha fazla bilgi için bkz:Bölümlenmiş tablolar ve dizinler.

Dizin oluşturulmuş görünümler

Görünüm veritabanında depolandığından kümelenmiş bir dizin içeren bir tablo saklanan aynı şekilde bir görünüm benzersiz kümelenmiş dizin oluşturma, sorgu performansını artırır.Sorgu iyileştirici sorgu yürütme kadar hızlandırmak için dizin oluşturulmuş görünümler kullanabilirsiniz.Sorgu bir değişimi için bu görünümü göz önünde bulundurulması gereken en iyi duruma getiricisi için başvurulacak görünümü yok.

Bir dizinlenmiş oluşturmak için aşağıdaki adımlar gereklidir görünümü görünüm başarıyla uygulanması için önemli:

  1. küme seçenekleri görünüme başvuran varolan tüm tablolar için doğru olduğunu doğrulayın.

  2. küme seçenekleri oturum için yeni bir tablo ve Görünüm oluşturmadan önce doğru olarak doğrulayın.

  3. Görünüm tanımını belirli olduğunu doğrulayın.

  4. Görünümü ile SCHEMABINDING seçeneğini kullanarak oluşturun.

  5. Benzersiz kümelenmiş dizin görünümünü oluşturun.

Dizin oluşturulmuş görünümler için gereken küme seçenekleri

Aynı ifade değerlendirme farklı sonuçlar üretmekDatabase Enginefarklı küme seçenekleri etkin değilse, sorgu yürütüldüğünde.Örneğin, sonra küme seçeneği CONCAT_NULL_YIELDS_NULL ON, ifade olarak küme**'abc ' + NULL değeri NULL. verir Ancak, sonra CONCAT_NULL_YIEDS_NULL, kapalı olarak ayarlanırsa aynı ifade oluşturur'abc'**.

Dizin oluşturulmuş görünümler görünüm doğru sürdürülebilir ve tutarlı sonuçlar döndürmesine emin olmak için birkaç küme seçenekleri sabit değerleri gerektirir.The SET options in the following table must be set to the values shown in the RequiredValue column whenever the following conditions occur:

  • dizinli görünüm oluşturulur.

  • Hiçbir ekleme yoktur, güncelleştirmek ya da silme işlemi yer aldığı herhangi bir tablo üzerinde gerçekleştirilen dizinli görünüm.Bu toplu kopyalama, çoğaltma ve dağıtılmış sorgular gibi işlemleri içerir.

  • dizinli görünüm göre sorgu iyileştirici sorgu planı oluşturmak için kullanılır.

    küme seçenekleri

    Gerekli değer

    Varsayılan sunucu değerini

    Default

    OLE DB ve ODBC değeri

    Default

    DB-Library değeri

    ANSI_NULLS

    AÇIK

    AÇIK

    AÇIK

    Kapalı

    ANSI_PADDING

    AÇIK

    AÇIK

    AÇIK

    Kapalı

    ANSI_WARNINGS *

    AÇIK

    AÇIK

    AÇIK

    Kapalı

    ARITHABORT

    AÇIK

    AÇIK

    Kapalı

    Kapalı

    CONCAT_NULL_YIELDS_NULL

    AÇIK

    AÇIK

    AÇIK

    Kapalı

    NUMERIC_ROUNDABORT

    Kapalı

    Kapalı

    Kapalı

    Kapalı

    QUOTED_IDENTIFIER

    AÇIK

    AÇIK

    AÇIK

    Kapalı

    *kümeting ANSI_WARNINGS için dolaylı olarak küme s veritabanı uyumluluk düzey, açık ARITHABORT ON küme 90 veya daha fazla.Veritabanı uyumluluk düzey 80 veya daha önce küme ise, ARITHABORT seçeneği açıkça ON olarak ayarlanmalıdır.

Bir OLE DB veya ODBC sunucusunun bağlantı kullanıyorsanız, değiştirilmesi gereken tek değer ARITHABORT ayardır.Tüm DB-Library değerleri kullanarak sunucu düzeyinde doğru ya da ayarlanmalıdırsp_configure veya uygulama kullanarak küme komutu. küme seçenekleri hakkında daha fazla bilgi için bkz:SQL Server'da Seçenekleri'ni kullanma.

Important noteImportant Note:

ARITHABORT kullanıcı bağlı olmasını öneririz küme Sunucu çapında görünümü veya hesaplanan sütun dizini birinci dizin olarak açık herhangi bir veritabanı sunucusunda oluşturulur.

Belirli işlevler

dizinli görünüm tanımı, deterministic olmalı.Bir Görünüm Seç listesinde, tüm, belirli ifadeleri olan yanı sıra nerede ve GROUP BY yan tümcesi, belirli.Belirli ifadeleri, belirli bir ile değerlendirilir her saat her saat aynı sonucu iade küme giriş değeri.Yalnızca belirli işlevleri, belirli ifadelerde yer alabilir.Bu her zaman belirli bir, üç parametre bağımsız değişkeni değerleri kümesi için aynı sonucu verir, DATEADD işlev belirli çünkü.GETDATE belirli değil aynı bağımsız değişken, ancak değişiklikleri her saat yürütülecek olan döndürdüğü değer her saat etkinleştirilir.Daha fazla bilgi için bkz:Deterministic ve Nondeterministic işlevler.

Float ifadeler varsa belirli bir ifade olsa da, kesin sonuç işlemci mimarisi veya sürüm mikro kodları üzerinde bağlı olabilir.Veri bütünlüğü sağlamak için bu tür ifadeler yalnızca dizin oluşturulmuş görünümler, anahtar olmayan sütun olarak yer alabilir.Float ifadeleri içeren belirli ifadeleri kesin olarak adlandırılır.Yalnızca belirli kesin ifadeler katılmak anahtar sütunları ve WHERE veya GROUP BY yan tümcesi dizinlenmiş görünümler.

Use the IsDeterministic property of the COLUMNPROPERTY function to determine whether a view column is deterministic.UseIsPrecise özellik belirli bir sütun, şema içeren bir görünüm belirlemek için COLUMNPROPERTY işlevinin bağlama kesin.COLUMNPROPERTY için geçersiz giriş doğru ise 1, 0, FALSE ve NULL döndürür.Bu sütun belirli ya da değil kesin değildir anlamına gelir.

Ek gereksinimleri

küme seçenekleri ve belirli bir işlev gereksinimleri ek olarak, aşağıdaki gereksinimlerin karşılanması gerekir:

  • CREATE INDEX yürüten kullanıcının görünüm sahibi olması gerekir.

  • Bir GROUP BY yan tümce, Görünüm tanımını içeriyorsa, anahtar benzersiz kümelenmiş dizin yalnızca GROUP BY yan tümcende belirtilen sütunlara başvurabilir.

  • Temel tablolar doğru küme seçenekleri olmalıdır saat tablo oluşturulur veya şema cilt payı olan Görünüm başvurulamaz.

  • Tablolar gerekir başvurulan iki bölümü adlarıylaschema**.**tablename, görünüm tanımı.

  • Kullanıcı tanımlı işlevler ile SCHEMABINDING seçeneği kullanılarak oluşturulması gerekir.

  • Kullanıcı tanımlı işlevler gerekir başvurulan iki bölümü adlarıylaschema**.**function.

  • Görünümü ile SCHEMABINDING seçeneği kullanılarak oluşturulması gerekir.

  • Görünüm, yalnızca temel tabloların aynı veritabanında, diğer görünümlere başvurmalıdır.

  • Görünüm tanımı aşağıdaki içermemesi gerekir:

    COUNT(*)

    satır kümesi kümesi işlev

    Türetilen tablonun

    iç birleştirmek

    DISTINCT

    STDEV, SAPMA ORT

    float*,text,ntext, orimagesütunlar

    Alt sorgu

    tam metin koşullarına (CONTAIN, FREETEXT)

    Null ifade, TOPLA

    CLR toplamak işlev kullanıcı tanımlı

    ÜST

    EN AZ, EN ÇOK

    BİRLEŞİM

    * dizinli görünüm içerenfloatsütun; ancak, bu sütunları kümelenmiş dizin anahtarını. eklenemez

GROUP BY varsa, Görünüm tanımını COUNT_BIG(*) içermeli ve HAVING içermelidir.Bu grupla kısıtlamalar yalnızca dizinli görünüm tanımı için geçerlidir.Bile bu grupla kısıtlamalarını karşılayan bir sorgu yürütme planı, dizinli görünüm kullanabilirsiniz.

Dizin oluşturulmuş görünümler oluşturulabilir bölümlenmiş bir temel tablo, ve kendilerini bölümlenmiş.Bölümleme hakkında daha fazla bilgi için "Dizin bölümlenmiş" bir önceki bölüme bakın.

Önlemek içinDatabase EngineDizin oluşturulmuş görünümler, kullanmasını içerir (EXPAND VIEWS) seçenek ipucu sorgu.Listelenen seçeneklerden herhangi biri yanlış ayarlanmışsa, ayrıca bu iyileştirici dizinleri görünümleri kullanarak engeller.Seçenek (EXPAND VIEWS) ipucu, ilgili daha fazla bilgi için bkz:SELECT (Transact-SQL).

Uyumlu düzey veritabanında 80'den küçük olamaz.dizinli görünüm içeren bir veritabanı için bir uyumluluk değiştirilemez düzey 80'den daha düşük.

Filtre uygulanmış dizinler

Satırları küçük bir yüzdesini seçtiğiniz sorguları için uygun en iyi duruma getirilmiş kümelenmemiş dizin, filtre uygulanmış bir dizindir bir tablo.Verilerin bir bölümünü dizin için bir filtre koşulunu kullanan tablo.İyi tasarlanmış bir filtre uygulanmış dizin sorgu performansını artırmak, depolama maliyetini azaltır ve bakım maliyetlerini azaltır.

Filtre uygulanmış dizinler için gereken küme seçenekleri

Gerekli değer sütununda küme seçenekleri, aşağıdaki koşullardan herhangi biri gerçekleştiğinde gereklidir:

  • Filtre uygulanmış bir dizin oluşturun.

  • INSERT, UPDATE, DELETE veya birleştirme işlemi filtre uygulanan bir dizin verileri değiştirir.

  • sorgu iyileştiricisi Sorgu yürütme planında süzülmüş dizini kullanır.

    küme seçenekleri

    Gerekli değer

    ANSI_NULLS

    AÇIK

    ANSI_PADDING

    AÇIK

    ANSI_WARNINGS *

    AÇIK

    ARITHABORT

    AÇIK

    CONCAT_NULL_YIELDS_NULL

    AÇIK

    NUMERIC_ROUNDABORT

    Kapalı

    QUOTED_IDENTIFIER

    AÇIK

    *kümeting ANSI_WARNINGS için dolaylı olarak küme s veritabanı uyumluluk düzey, açık ARITHABORT ON küme 90 veya daha fazla.Veritabanı uyumluluk düzey 80 veya daha önce küme ise, ARITHABORT seçeneği açıkça ON olarak ayarlanmalıdır.

küme seçenekleri doğru değilse, aşağıdaki durumlar ortaya çıkabilir:

  • Filtre uygulanmış dizini oluşturulmaz.

  • The Database Engine generates an error and rolls back INSERT, UPDATE, DELETE, or MERGE statements that change data in the index.

  • Sorgu iyileştirici değil düşünün dizin için bir Transact-SQL deyimi yürütme planı

Dizinler, filtre hakkında daha fazla bilgi için bkz:Süzülmüş dizin tasarım yönergeleri.

Kayma dizinler

XML dizinleri

XML hakkında bilgi için bkz: dizinler,XML INDIS (Transact-SQL) CREATEveXML veri türü sütun dizinleri.

Dizin anahtar boyutu

Bir dizin anahtar maksimum 900 bayt boyutudur.Dizinlerdevarcharsütun 900 baytı aşamaz oluşturulabilir, sütundaki varolan verileri değil aşan 900 bayt saat dizini oluşturulur; ancak, sonraki ekleme veya güncelleştirme eylemlerini sütunların toplam boyutu 900 bayttan büyük olacak neden olacak başarısız.Daha fazla bilgi için bkz:Dizin anahtarlarının en büyük boyutu.kümelenmiş dizin, dizin anahtar içeremezvarcharROW_OVERFLOW_DATA tahsisini varolan veriyi içeren sütunu unit., kümelenmiş dizin oluşturulur, birvarcharsütun varolan verileri ise IN_ROW_DATA ayırma birimi, sonraki ekleme veya güncelleştirme eylemleri gönderme sütun veri devre dışı-satır olacak başarısız.Ayırma birimleri hakkında daha fazla bilgi için bkz:Tablo ve dizin kuruluşu.

Kümelenmemiş dizinleri dizinin yaprak düzeyinde anahtar olmayan sütunlar içerebilirsiniz.Bu sütunları tarafından kabulDatabase Enginedizin anahtar boyutunu hesaplarken.Daha fazla bilgi için bkz:Içerilen sütunları içeren dizin.

Hesaplanan sütunlar

Hesaplanan sütunlar üzerinde dizinler oluşturulabilir.Buna ek olarak, hesaplanan sütunlar özellik PERSISTED olabilir.YaniDatabase Enginehesaplanan değerler tabloda saklar ve hesaplanan sütun bağımlı olduğu diğer sütunlara güncelleştirildiğinde güncelleştirir.The Database Engine uses these persisted values when it creates an index on the column, and when the index is referenced in a query.

Hesaplanan bir sütunun dizin için hesaplanan sütun belirli ve kesin gerekir.Ancak PERSISTED özelliğini kullanarak eklemek indexable hesaplanan sütun türünü genişletir:

  • Sütunları temel alan ComputedTransact-SQLCLR işlevleri ve CLR kullanıcı tanımlı türü yöntem, işaretlenir belirli kullanıcı.

  • Hesaplanan sütunlar tarafından tanımlanan belirli olan ifadeler göreDatabase Engineancak imprecise.

Kalıcı bir hesaplanmış sütunu "Gerekli küme seçenekleri için dizinlenmiş görünümleri" bir önceki bölümde gösterilen ayarlamak için aşağıdaki küme seçenekleri gerektirir.

Bu dizin için tüm koşulları karşılayan sürece benzersiz veya birincil anahtar kısıtlaması hesaplanan sütun içerebilir.Özellikle, hesaplanan sütun, belirli ve kesin veya belirli ve kalıcı olması gerekir.Determinism hakkında daha fazla bilgi için bkz:Deterministic ve Nondeterministic işlevler.

Computed tarafından türetilmiş sütunlarimage,ntext,text,varchar(max),nvarchar(max),varbinary(max), andxmlveri türü olabilir dizini olarak bir anahtar veya içerdiği anahtar olmayan sütunu olarak hesaplanan sütun veri türü izin verilen anahtar sütunu dizin veya anahtar olmayan sütunu.Örneğin, oluşturamıyor, hesaplanan bir birincil XML dizinixmlsütun.Dizin anahtar boyutu 900 baytı aşıyorsa bir uyarı iletisi görüntülenir.

Hesaplanmış bir sütunda dizin oluşturma, bir ekleme, başarısız olmasına neden veya daha önce çalıştığınız işlem güncelleştirin.Böyle bir hata alabilir, koyun hesaplanan sütun sonuçlar aritmetik hatalı.Örneğin, aşağıdaki tablo, ancak hesaplanan sütunc, aritmetik hataya nedenINSERTdeyim çalışır.

CREATE TABLE t1 (a int, b int, c AS a/b);
INSERT INTO t1 VALUES (1, 0);

Bunun yerine tablo oluşturduktan sonra oluşturduğunuz bir hesaplanan sütun dizinicaynıINSERTdeyim edecek şimdi başarısız.

CREATE TABLE t1 (a int, b int, c AS a/b);
CREATE UNIQUE CLUSTERED INDEX Idx1 ON t1(c);
INSERT INTO t1 VALUES (1, 0);

Daha fazla bilgi için bkz:Hesaplanan sütunlar üzerinde dizin oluşturma.

Dizin içinde bulunan sütunlar

Olmayan anahtar sütunları, sütunlar, adı verilen yaprak düzeyine eklenebilir bir kümelenmemiş dizin sorgu kapsayan tarafından sorgu performansını artırmak için.Diğer bir deyişle, sorguda başvurulan tüm sütunların dizin anahtar veya anahtar olmayan sütunu olarak eklenir.Bu bir dizin taramayı tüm gerekli bilgileri bulmak sorgu iyileştirici sağlar; tablo veya kümelenmiş dizin verileri değil erişilir.Daha fazla bilgi için bkz:Içerilen sütunları içeren dizin.

Dizin seçenekleri belirtme

SQL Server 2005 sunulan yeni dizin seçenekleri ve aynı zamanda, seçenekleri belirlenmiş biçimini değiştirir.In backward compatible syntax, WITH option_name is equivalent to WITH ( <option_name> = ON ).Zaman, küme dizin seçenekleri, aşağıdaki kurallar geçerlidir:

  • New index options can only be specified by using WITH (option_name= ON | OFF**)**.

  • Seçenekler aynı ifadede her ikisi de geriye doğru uyumlu ve yeni sözdizimi kullanılarak belirtilemez.Örneğin, ile belirtme**(DROP_EXISTING,** ONLINE = ON**)** deyim hata. olur

  • When you create an XML index, the options must be specified by using WITH (option_name= ON | OFF**)**.

DROP_EXISTING yan tümce

The DROP_EXISTING kullanabileceğiniz yan tümce dizini yeniden oluşturmak için ekleme veya sütun bırakın, seçeneklerini değiştirmek, sütunun sıralama düzeni düzenini değiştirmek veya bölümleme düzeni veya dosya grubu.

Dizin bir birincil anahtar veya UNIQUE sınırlaması uygular ve dizin tanımı, herhangi bir şekilde değiştirilmez, dizin bırakılır ve varolan kısıtlama koruma yeniden.Ancak, dizin tanımı değiştirilirse deyim başarısız olur.birincil anahtar veya UNIQUE sınırlamasıyla tanımını değiştirmek için sınırlama bırakın ve yeni tanımı ile kısıtlama ekleme.

DROP_EXISTING ya da aynı veya farklı kümesi ile de bir tabloda anahtarları, kümelenmiş dizin oluşturun, performansı artırır kümelenmemiş dizinleri.DROP_EXISTING bir DROP INDEX deyim yürütme yeni kümelenmiş dizin için CREATE INDEX deyiminin ardından eski kümelenmiş dizin üzerinde çalışmasını değiştirir.Bir kez kümelenmemiş dizinler yeniden oluşturulur ve sonra yalnızca dizin tanımı değişti.DROP_EXISTING yan tümce aynı adı, anahtar ve bölüm sütunlar, öznitelik benzersiz dizin ve sıralama düzeni olarak özgün dizinin Dizin tanımı varsa, kümelenmemiş dizinler yeniden.

Kümelenmemiş dizinler yeniden oluşturulur veya olsa da, bunlar her zaman, özgün dosya gruplarını veya bölüm düzenlerini kalır ve özgün bölümü işlevlerini kullanın.Kümelenmiş bir dizin için farklı dosya grubu veya bölümleme düzeni oluşturulmuşsa, dosyanın yeni konumunu kümelenmiş dizin ile çakıştığı kümelenmemiş dizinleri taşınmaz.Bu nedenle, daha önce kümelenmiş dizin ile hizalı kümelenmemiş dizinleri bile, bunlar artık ile hizalı.Bölümlenmiş dizin hizalama hakkında daha fazla bilgi için bkz:Bölümlenmiş dizinler için özel yönergeleri.

Aynı dizin anahtar sütunları aynı sırada ve aynı artan veya azalan düzende, kullanılırsa dizin deyimsi belirtmediği sürece DROP_EXISTING yan verileri yeniden sıralanır değil bir kümelenmemiş dizin ve çevrimiçi seçeneği kapalı olarak küme.Kümelenmiş dizin devre dışı bırakılırsa, CREATE INDEX ile DROP_EXISTING işlem ile çevrimiçi kapalı küme yapılması gerekir.ÇEVRİMİÇİ kapalı küme ile kümelenmemiş bir dizin devre dışı bırakılır ve devre dışı bırakılmış bir kümelenmiş dizin ile ilişkili değildir, CREATE INDEX ile DROP_EXISTING işlem yapılabilir ya da açık.

128 Kapsam veya daha fazla dizin bırakılan veya yeniden,Database Enginedefers gerçek sayfa deallocations ve bunların ilgili Kilitleri, kadar sonra hareket işlemlerini.Daha fazla bilgi için bkz:Bırakma ve büyük nesneleri yeniden oluşturma.

Seçenek ONLINE

Çevrimiçi dizin işlemleri gerçekleştirmek için aşağıdaki kurallar uygulanır:

  • temel alınan tablo olamaz değiştirilmiş, kesilmiş veya çevrimiçi dizin işlemi sürecinde iken bıraktı.

  • Dizin işlemi sırasında ek geçici disk alanı gereklidir.Daha fazla bilgi için bkz:Dizin disk alanı gereksinimlerini belirleme.

  • Bölümlenmiş dizinlerde işlemleri çevrimiçi gerçekleştirilebilir ve içeren dizinleri hesaplanan sütunlar kalıcı veya sütunlar dahil.

Daha fazla bilgi için bkz:Çevrimiçi ındex işlemi gerçekleştiriliyor.

Satır ve sayfa kilitleri seçenekleri

ALLOW_ROW_LOCKS = ON ve ALLOW_PAGE_LOCK = ON, satır, sayfa- ve tablo düzeyindeki kilitler dizine erişirken verilir.The Database Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.Daha fazla bilgi için bkz:Kilit yükseltme (Veritabanı Altyapısı).

, ALLOW_ROW_LOCKS = OFF ve ALLOW_PAGE_LOCK = OFF, yalnızca bir tablo düzey kilit, izin verilen erişim dizini.

Bir dizin için kilitleme parçalı ya da yapı yapılandırma hakkında daha fazla bilgi için bkz:Bir dizin için kilitleme özelleştirme.

Dizin bilgilerini görüntüleme

Sistem saklı yordamları ve dizinler hakkında bilgi için katalog görünümleri, sistem işlevleri kullanabilirsiniz.Daha fazla bilgi için bkz:Dizin bilgileri görüntüleme.

Veri sıkıştırma

Veri sıkıştırma konusuna açıklananSıkıştırılmış tablolar ve dizinler oluşturma.Göz önüne almanız gereken önemli noktalar şunlardır:

  • Sıkıştırma, bir sayfada depolanması daha fazla satır izin verebilirsiniz, ancak en büyük satır boyutu değişmez.

  • Bir dizin değil yaprak sayfaları sayfa sıkıştırılmış değildir, ancak satır sıkıştırılabilir.

  • Kümelenmemiş dizin her bir sıkıştırma ayarı vardır ve temel, sıkıştırma ayarını devralmaz tablo.

  • Öbek üzerinde kümelenmiş dizin oluşturulduğunda, bir diğer sıkıştırma durumu belirtilmediği sürece, kümelenmiş dizin öbek sıkıştırılma durumunu alır.

Bölümlenmiş dizinlere uygulanacak kısıtlamalar:

  • Tablo varsa sıkıştırma tek bir bölümde ayarını değiştiremezsiniz nonaligned dizin.

  • ALTER INDEX<dizin>...REBUILD PARTITION ...syntax rebuilds the specified partition of the index.

  • ALTER INDEX<dizin>...REBUILD WITH ...syntax rebuilds all partitions of the index.

Nasıl sıkıştırma durumu bir tablo, dizin veya bir bölümünü etkiler değerlendirmek içinsp_estimate_data_compression_savings saklı yordam.

İzinler

Tablo veya görünüm üzerinde ALTER iznine gerek duyar.Kullanıcı üye olmasıSistem Yöneticisi sabit sunucu rolü veya db_ddladmindb_owner sabit veritabanı rolü.

Örnekler

C.Basit bir kümelenmemiş dizin oluşturma

Aşağıdaki örnek oluşturur bir kümelenmemiş dizin,VendorIDsütunPurchasing.ProductVendor Tablo.

B.Basit bir kümelenmemiş bileşik dizin oluşturma

Aşağıdaki örnek, kümelenmemiş bir bileşik dizin oluştururSalesQuotaveSalesYTD sütunSales.SalesPersonTablo.

C.Benzersiz bir kümelenmemiş dizin oluşturma

Aşağıdaki örnek, benzersiz bir kümelenmemiş dizin oluştururNamesütunProduction.UnitMeasureTablo.Dizini benzersizlik eklenen verilerNamesütun.

Aşağıdaki sorgu benzersizlik kısıtlaması, aynı değeri içeren bir satır mevcut bir satır eklemek deneyerek test eder.

--Verify the existing value.
SELECT Name FROM Production.UnitMeasure WHERE Name = N'Ounces';
GO
INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
    VALUES ('OC', 'Ounces', GetDate());

Sonuçta ortaya çıkan hata iletisi şudur:

Server: Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'UnitMeasure' with unique index 'AK_UnitMeasure_Name'. The statement has been terminated.

D.IGNORE_DUP_KEY seçeneğini kullanma

Etkisini aşağıdaki örnekte gösterilmiştirIGNORE_DUP_KEYseçeneğini ekleyerek birden çok satır geçici tabloya ilk seçenek küme içinONve seçeneğiyle yeniden küme içinOFF.Tek bir satır eklenir#Testkasıtlı olarak bir neden olan bir tablo değeri ikinci birden çok satırINSERTdeyim yürütüldüğünde.Eklenen satır tablosundaki satır sayısını verir.

USE AdventureWorks;
GO
CREATE TABLE #Test (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);
GO
CREATE UNIQUE INDEX AK_Index ON #Test (C2)
    WITH (IGNORE_DUP_KEY = ON);
GO
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());
INSERT INTO #Test SELECT * FROM Production.UnitMeasure;
GO
SELECT COUNT(*)AS [Number of rows] FROM #Test;
GO
DROP TABLE #Test;
GO

İkinci sonuçlar aşağıdaINSERTdeyim.

Server: Msg 3604, Level 16, State 1, Line 5 Duplicate key was ignored.

Number of rows 
-------------- 
38

Gelen satırların eklenmesini bildirimiProduction.UnitMeasurebenzersiz kısıtlamayı ihlal eden bir tablo başarıyla eklenen.Bir uyarı verilmeden ve göz ardı yinelenen satır ancak tüm işlemin değil toplu geri.

Aynı ifadeleri, ancak birlikte yürütülenIGNORE_DUP_KEYküme toOFF.

USE AdventureWorks;
GO
CREATE TABLE #Test (C1 nvarchar(10), C2 nvarchar(50), C3 datetime);
GO
CREATE UNIQUE INDEX AK_Index ON #Test (C2)
    WITH (IGNORE_DUP_KEY = OFF);
GO
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());
INSERT INTO #Test SELECT * FROM Production.UnitMeasure;
GO
SELECT COUNT(*)AS [Number of rows] FROM #Test;
GO
DROP TABLE #Test;
GO

İkinci sonuçlar aşağıdaINSERTdeyim.

Server: Msg 2601, Level 14, State 1, Line 5
Cannot insert duplicate key row in object '#Test' with unique index
'AK_Index'. The statement has been terminated.

Number of rows 
-------------- 
1

Dikkat edin, alınan satırların hiçbiriProduction.UnitMeasureTablo eklenen tabloya ihlal tablosunda yalnızca bir satır olsaUNIQUEdizini kısıtlama.

E.Bırakma dizini yeniden oluşturmak için DROP_EXISTING kullanma

Aşağıdaki örnek, keser ve varolan bir dizini yeniden oluşturur,ProductIDsütunProduction.WorkOrderkullanarak tabloDROP_EXISTINGseçenek.SeçenekleriFILLFACTORvePAD_INDEXolan da kümesi.

F.Bir görünüm dizin oluşturma

Aşağıdaki örnek, bu görünüm bir görünüm ve bir dizin oluşturur.İki sorgu eklenmiştir dizinlenmiş görünümün kullanın.

G.(Anahtar olmayan) sütunlar ile dizin oluşturma

Aşağıdaki örnek, bir anahtar sütun kümelenmemiş bir dizin oluşturur ( PostalCode) ve dört anahtar olmayan sütunu ( AddressLine1, AddressLine2, City, StateProvinceID).Dizin aşağıdaki tarafından kapsanan bir sorgudur.Göre sorgu iyileştirici, seçili olan dizini görüntülemek içinSorguSQL Server Management Studioseçin sorgu. yürütme önce Görüntü gerçek Execution Plan menüde

H.Oluşturma bir bölümlenmiş dizin

Aşağıdaki örnek kümelenmemiş bölümlenmiş bir dizin oluştururTransactionsPS1varolan bölümleme düzeni.Bu örnek, bölümlenmiş dizin örnek yüklü olduğunu varsayar.Yükleme bilgileri için bkz:Readme_PartitioningScript.

USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
    WHERE name = N'IX_TransactionHistory_ReferenceOrderID'
    AND object_id = OBJECT_ID(N'Production.TransactionHistory'))
DROP INDEX IX_TransactionHistory_ReferenceOrderID
    ON Production.TransactionHistory;
GO
CREATE NONCLUSTERED INDEX IX_TransactionHistory_ReferenceOrderID
    ON Production.TransactionHistory (ReferenceOrderID)
    ON TransactionsPS1 (TransactionDate);
GO

I.Filtre uygulanmış bir dizin oluşturma

Aşağıdaki örnek Production.BillOfMaterials filtre uygulanmış bir dizin oluşturur tablo.Filtre koşulunu süzülmüş dizin anahtar sütunları olan sütunlar içerebilir.Bu örnekte, doðrulama yalnızca NULL olmayan bitiştarihi olduğu satırları seçer.

J.Sıkıştırılmış bir dizin oluşturma

Aşağıdaki örnek, satır sıkıştırması kullanılarak nonpartitioned tablo üzerinde bir dizin oluşturur.

CREATE NONCLUSTERED INDEX IX_INDEX_1 
    ON T1 (C2)
WITH ( DATA_COMPRESSION = ROW ) ; 
GO

Aşağıdaki örnek bir dizin oluşturur bir bölümlenmiş tablo dizinin tüm bölümlerinde satır sıkıştırma kullanarak.

CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH ( DATA_COMPRESSION = ROW ) ;
GO

Aşağıdaki örnek, dizin bölümlenmiş bir oluşturur tablo bölümünde sayfa sıkıştırma kullanarak1disk dizini ve satır sıkıştırma2-4dizin.

CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1),
    DATA_COMPRESSION = ROW ON PARTITIONS (2 TO 4 ) ) ;
GO

Değişiklik Geçmişi

Güncelleştirilmiş içerik

Seçeneği etkin olduğunda açıklığa kavuşturacak biçimde güncelleştirildi IGNORE_DUP_KEY tanımı.