CREATE INDEX (Transact-SQL)

Belirtilen tablo veya belirtilen bir tablogörünümü ilişkisel dizin oluşturur.tabloveri önce dizin oluşturulabilir.İlişkisel dizin, bir tam veritabanı adı belirterek tablo veya başka bir veritabanı görünümleri oluşturulabilir.

Not

xml dizin oluşturma hakkında daha fazla bilgi için bkz: xml Index (Transact-SQL) oluştur.Kayma dizin oluşturma hakkında daha fazla bilgi için bkz: KAYMA Index (Transact-SQL) oluştur.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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 ,...n)

<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 bir benzersiz dizin oluşturur.benzersiz dizin içinde iki satır aynı dizin anahtar değerine sahip olmasına izin verilen biridir.Bir görünümde kümelenmiş dizin benzersiz olması gerekir.

    Veritabanı Altyapısı İzin vermez zaten, yinelenen değerler içeren sütunlar üzerinde benzersiz dizin oluşturma olup olmadığını ise IGNORE_DUP_KEY küme için on.Bunu denediyseniz, Veritabanı Altyapısı görüntüler bir hata iletisi.Yinelenen değerleri, sütun veya sütunları benzersiz dizin oluşturulmadan önce kaldırılmalıdır.benzersiz dizin içinde kullanılan sütunları küme değil olmalıdır benzersiz dizin oluşturulduğunda, çoğaltmaları birden çok null değerleri kabul edildiği için null.

  • KÜMELENMİŞ
    İçinde bir tablokarşılık gelen satırların fiziksel sırası anahtar değerlerinin mantıksal sırası belirler bir dizin oluşturur.Alt ya da yaprak, düzey kümelenmiş dizin tablogerçek veri satırlarını içerir.Bir tablo veya görünümü bir kümelenmiş dizin her saatizin verilir.Daha fazla bilgi için, bkz. Kümelenmiş dizin yapıları.

    kümelenmiş dizin benzersiz bir görünümle bir dizinli görünümolarak adlandırılır.kümelenmiş dizin benzersiz fiziksel olarak bir görünüm oluşturma görünümü gerçeğe.Diğer dizinler aynı görünüm üzerinde tanımlanabilir önce kümelenmiş dizin benzersiz bir görünüm oluşturulmalıdır.Daha fazla bilgi için, bkz. Dizin oluşturulmuş görünümler tasarlama.

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

    clustered belirtilmezse, bir kümelenmemiş dizin oluşturulur.

    Not

    yaprakdüzey kümelenmiş dizin ve veri sayfaları olduğundan aynı tanım olarak, bir kümelenmiş dizin oluşturma ve on kullanarak partition_scheme_name ya da on filegroup_nameyan tümce etkili taşır bir tablo tablo oluşturulduğu dosya grubu yeni bölümleme düzeni veya dosya grubu. Tablo veya dizin üzerinde belirli filegroups oluşturmadan önce hangi dosya gruplarını kullanılabilir ve dizin için yeterli boş alana sahip oldukları doğrulayın.Daha fazla bilgi için, bkz. Dizin Disk alanı gereksinimleri belirleme.

  • KÜMELENMEMİŞ
    tablomantık sırası belirten bir dizin oluşturur.Bir kümelenmemiş dizin, dizinlenmiş sıralarına göre veri satırların fiziksel sırası bağımsızdır.Daha fazla bilgi için, bkz. Kümelenmemiş dizin yapıları.

    Her tablo , dizinler nasıl oluşturulduğunu bakılmaksızın en fazla 999 kümelenmemiş dizinler olabilir: ya da birincil anahtar ve benzersiz kısıtlamaları ile dolaylı veya açıkça create INDEX ile.

    Dizin oluşturulmuş görünümler için yalnızca önceden tanımlanmış benzersiz bir kümelenmiş dizin sahip bir görünüm üzerinde kümelenmemiş dizinler oluşturulabilir.

    nonclustered varsayılandır.

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

  • column
    Dizin dayandığı sütun veya sütunları olan.Birleşik değerlerini belirtilen sütunlara bileşik dizin oluşturmak için iki veya daha fazla sütun adlarını belirtin.bileşik dizin, sonra parantez içinde sıralama öncelik sırasına dahil edilecek sütunlar listesinde table_or_view_name.

    En çok 16 sütun tek bileşik dizin anahtarbirleştirilebilir.bileşik dizinanahtar sütunları aynı tablo ya da görünüm olması gerekir. Birleştirilmiş dizin değeri izin verilen en büyük boyutu 900 bayttır.

    Büyük nesne (lob) veri türü olan sütunlar ntext, text, varchar(max), nvarchar(max), varbinary(max), xml, veya image için bir dizin anahtar sütunlar belirtilemezAyrıca, Görünüm tanımı içeremez ntext, text, veya image sütunlar, bunlar create INDEX deyimbaşvurulmayan bile.

    İkili sıralama türünü destekliyorsa, CLR kullanıcı tanımlı türü sütunlarındaki dizinler oluşturabilirsiniz.Ayrıca, yöntem deterministic işaretlenmiş ve veri erişim işlemleri gerçekleştirmeyin sürece, kullanıcı tanımlı türsütun, yöntem çağırmaları olarak tanımlanan hesaplanan sütunlar üzerinde dizinler oluşturabilirsiniz. CLR kullanıcı tanımlı türü sütun dizin oluşturma hakkında daha fazla bilgi için bkz: clr kullanıcı tanımlı türler.

  • [ ASC | DESC]
    Azalan veya artan belirli dizin sütunsıralama yönünü belirler.asc varsayılandır.

  • INCLUDE **(**column [ ,... n ] )
    Olmayan belirtir-anahtar sütunları yaprak düzey kümelenmemiş dizineklenecek.kümelenmemiş dizin benzersiz veya benzersiz olmayan olabilir.

    Sütun adları Ekle listesinde yinelenen ve aynı anda her iki anahtar olarak kullanılan ve olmayan olamaz-anahtar sütunlar.kümelenmiş dizin ' % s'tablo tabloüzerinde tanımlı, kümelenmemiş dizinleri her zaman kümelenmiş dizin sütunları içerir.Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin.

    Tüm veri türleri dışında izin verilen text, ntext, ve image.Dizin oluşturulmuş veya çevrimdışı yeniden gerekir (çevrimiçi = off) herhangi birinin belirtilen, olmayan-anahtar sütunlar varchar(max), nvarchar(max), veya varbinary(max) veri türü.

    Hesaplanan sütunlar deterministic olmayan ve kesin veya günümüzdeki sütunlar olabilir.Hesaplanan sütunlar türetilen image, ntext, text, varchar(max), nvarchar(max), varbinary(max), ve xml veri türleri eklenebilir içinde olmayan - dahil sütunolarak izin verilenanahtar sütunları hesaplanmış bir sütun veri türleri gibi uzun.Daha fazla bilgi için, bkz. Dizinler üzerinde hesaplanan sütunlar oluşturma.

    xml dizin oluşturma konusunda bilgi için bkz: xml Index (Transact-SQL) oluştur.

  • Burada <filter_predicate>
    Dizine eklemek için hangi satırların belirterek filtre uygulanmış bir dizin oluşturur.Filtre uygulanmış dizin kümelenmemiş dizin tabloolmalıdır.Filtre uygulanmış istatistikleri veri satırları için filtre uygulanmış dizin oluşturur.

    Filtre yüklemi kullandığı basit karşılaştırma mantığı ve hesaplanmış bir sütun, bir UDT sütun, uzamsal veri türü sütun, başvuramaz veya bir hierarchyID veri türü sütun.null harfleri kullanarak karşılaştırmaları ile karşılaştırma işleçleri izin verilmez.IS null ve IS not null işleçleri kullanın.

    Filtre yüklemler için bazı örnekler aşağıda Production.BillOfMaterials tablo:

    WHERE StartDate > '20040101' AND EndDate <= '20040630'

    WHERE ComponentID IN (533, 324, 753)

    WHERE StartDate IN ('20040404', '20040905') AND EndDate IS NOT NULL

    Filtre uygulanmış dizinler, xml dizinler ve tam metin dizinleri için uygulanmaz.BENZERSİZ dizinler için yalnızca seçili satırları benzersiz dizin değerleri olmalıdır.Filtre uygulanmış dizinler IGNORE_DUP_KEY seçeneğini izin vermez.

  • ON partition_scheme_name**(column_name)**
    bölümlenmiş dizin bölümlerini eşlenmiş olması dosya gruplarını tanımlar bölümleme düzeni belirler.Ya da yürüterek, bölümleme düzeni veritabanı içinde mevcut olmalıdır Bölüm düzeni oluşturmak veya alter bölüm düzeni.column_namekarşı bölümlenmiş dizin bölümlenmiş sütun belirtir.Bu sütun , veri türü, uzunluğu ve bağımsız bölüm işlev duyarlığını eşleşmesi gerekir, partition_scheme_name kullanıyor.column_nameDizin tanımı sütunlarda için sınırlı değildir.Herhangi bir sütun temel tablo , zaman dışında belirtilebilir benzersiz bir dizin bölümleme column_name benzersiz anahtarolarak kullanılan arasından seçilmelidir.Bu kısıtlamayı sağlar Veritabanı Altyapısı yalnızca tek bir bölüm içindeki anahtar değerleri benzersizliğini doğrulamak için.

    Not

    Benzersiz olmayan, kümelenmiş dizinayırırken Veritabanı Altyapısı zaten belirtilmezse, varsayılan olarak bölümleme sütun kümelenmiş dizin anahtarlarının listesine ekler.Zaman kümelenmemiş dizin bölümleme bir benzersiz olmayan, Veritabanı Altyapısı bölümlemesütun olmayan bir ekler-(dahil)anahtar sütun zaten belirtilmemişse,.

    partition_scheme_name Veya filegroup belirtilmezse ve tablo bölümlenmiş, aynı bölümlemesütuntemel tabloolarak kullanarak aynı bölümleme düzeni, dizine yerleştirilir.

    Not

    Bir xml dizin bölümleme şeması belirtemezsiniz.temel tablo bölümlere ayrılmışsa xml dizin ' % s'tablo tabloolarak aynı bölümleme düzeni kullanır.xml dizin oluşturma konusunda bilgi için bkz: xml Index (Transact-SQL) oluştur.

    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 üzerinde belirtilen dosya grubuoluşturur.Hiçbir konumu belirtilir ve tablo ya da görünümü olmayan bölümlenmiş dizini aynı dosya grubu temel tablo veya Görünüm kullanır.dosya grubu önceden mevcut olmalıdır.

  • on "varsayılan""
    Belirtilen dizin üzerinde varsayılan dosya grubuoluşturur.

    Bu bağlamda terim varsayılan anahtar sözcük değil.Varsayılan dosya grubu için bir tanımlayıcıdır ve, gibi on sınırlanması gerekir "varsayılan" ya da on varsayılan**[]**."Varsayılan" belirtilmişse, QUOTED_IDENTIFIER seçeneği geçerli oturumiçin açık olmalıdır.Bu varsayılan ayardır.Daha fazla bilgi için, bkz. set QUOTED_IDENTIFIER (Transact-SQL).

  • [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "Boş" } ]
    kümelenmiş dizin oluşturulduğunda FILESTREAM veri tablo yerleşimini belirtir.FILESTREAM_ON yan tümce FILESTREAM veri farklı FILESTREAM dosya grubu ya da bölümleme düzenitaşınmasını sağlar.

    filestream_filegroup_nameFILESTREAM dosya grubuadıdır.dosya grubu kullanılarak ' % s'filegroup dosya grubu için tanımlanmış bir dosya olmalıdır bir create database veya alter databasedeyim; Aksi halde, bir hata ortaya çıkar.

    tablo bölümlere ayrılmışsa, FILESTREAM_ON yan tümce dahil edilmelidir ve aynı bölüm işlev ve bölümleme sütunlar tablo' % s'düzeni bölümleme düzeni olarak kullanan FILESTREAM filegroups bir bölümleme düzeni belirtmelisiniz.Aksi halde, bir hata ortaya çıkar.

    FILESTREAM sütun bölümlenmiş tablo bölümlenmiş değil.FILESTREAM veri tablo FILESTREAM_ON yan tümcetümcesinde belirtilen tek bir dosya grubu depolanması gerekir.

    FILESTREAM_ON null create INDEX deyim kümelenmiş dizin oluşturulmuş ve tablo FILESTREAM sütuniçermiyor belirtilebilir.

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

<Nesne>:: =

Dizini oluşturulacak tam veya nonfully nitelikli nesnedir.

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

  • schema_name
    tablo ya da görünümün ait olduğu şema addır.

  • table_or_view_name
    tablo ya da Görünüm sıralanacak adıdır.

    Görünüm üzerinde bir dizin oluşturmak için ema BALAMA ile tanımlanması gerekir.Tüm kümelenmemiş dizin oluşturulmadan önce kümelenmiş dizin benzersiz bir görünüm oluşturulmalıdır.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şturduğunuzda kullanılacak seçenekleri belirtir.

  • PAD_INDEX = {ON | OFF }
    Dizin doldurmabelirtir.Varsayılan kapalı'dır.

    • ON
      Tarafından belirtilen boş alan yüzdesini fillfactor dizini Orta -düzey sayfalar için uygulanır

    • Kapalı veya fillfactor belirtilmezse
      Orta -düzey sayfalar kapasite yakınında doldurulmuş, en büyük boyutu en az bir satır için yeterli boşluk bırakarak dizini, küme , ara sayfalarında anahtarları düşünmeden olabilir.

    Yalnızca FILLFACTOR belirtilen, PAD_INDEX tarafından FILLFACTOR belirtilen yüzde kullandığından PAD_INDEX seçenek yararlı olacaktır.İçin FILLFACTOR belirtilen yüzde bir satır için olanak verecek kadar büyük değilse, Veritabanı Altyapısı dahili olarak izin vermek için en az yüzde geçersiz kılarBir Ara dizin sayfası satır sayısı hiçbir zaman değeri ikiden azsa, nasıl düşük değeri ne olursa olsun değildir fillfactor.

    Geriye dönük uyumlu sözdiziminde ile PAD_INDEX ile PAD_INDEX için eşdeğerdir = on.

  • FILLFACTOR **=**fillfactor
    Nasıl tam olarak gösteren bir yüzdesini belirtir Veritabanı Altyapısı olun yaprak düzey her dizin sayfası sırasında dizin oluşturma veya yeniden oluşturma.fillfactor1-100 bir tamsayı değeri olmalıdır.Varsayılan değer 0'dir.fillfactor 100 Ya da 0, Veritabanı Altyapısı yaprak sayfalar dolu kapasite dizinler oluşturur

    Not

    Dolgu faktörü 0 ve 100 tüm açılardan aynı değerlerdir.

    Yalnızca dizin oluşturulduğunda veya yeniden FILLFACTOR ayar uygulanır.Veritabanı Altyapısı Dinamik olarak değil tutmak belirtilen yüzdesini boş sayfaları.doldurma faktörü ayarını görüntülemek için sys.indexes Katalog görünümü.

    Önemli notÖnemli

    100'den küçük olduğundan verileri kapladığı depolama alanı miktarını etkiler FILLFACTOR ile kümelenmiş dizin oluşturma Veritabanı Altyapısı kümelenmiş dizinoluşturduğunda, verileri yeniden dağıtır.

    Daha fazla bilgi için, bkz. Dolgu etmeni.

  • SORT_IN_TEMPDB = {ON | OFF }
    Geçici sıralama sonuçlar depolanacağı belirtir tempdb.Varsayılan kapalı'dır.

    • ON
      Dizin oluşturmak için kullanılan ara sıralama sonuçlar depolanmış olan tempdb.Bu, dizin oluşturmak için gereken saat azaltabilir tempdb bir farklı küme , kullanıcı veritabanıdisklerden açıktır.Ancak, bu dizin oluşturma sırasında kullanılan disk alanı miktarını artırır.

    • KAPALI
      Ara sıralama sonuçlar dizini ile aynı veritabanında depolanır.

    kullanıcı veritabanı dizini oluşturmak için gereken alan ek olarak tempdb Ara sıralama sonuçlarbarındırmak için ek alan hakkında aynı miktarda olması gerekir.Daha fazla bilgi için, bkz. tempdb ve dizin oluşturma.

    Geriye dönük uyumlu sözdiziminde ile SORT_IN_TEMPDB ile SORT_IN_TEMPDB için eşdeğerdir = on.

  • IGNORE_DUP_KEY = {ON | OFF }
    Yinelenen anahtar değerleri bir benzersiz dizineklemek INSERT işlemi çalıştığında hata yanıtını belirtir.Dizin oluşturulduğunda veya yeniden sonra işlemleri yalnızca eklemek için IGNORE_DUP_KEY seçeneğini uygular.Seçenek yürütürken etkisi create INDEX, alter INDEX, veya güncelleştirme.Varsayılan kapalı'dır.

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

    • KAPALI
      Hata iletisi, bir benzersiz dizinyinelenen anahtar değerleri eklendiğinde ortaya çıkar.Tüm ekleme işlemini geri alınır.

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

    IGNORE_DUP_KEY görüntülemek için sys.indexes.

    Geriye dönük uyumlu sözdiziminde ile IGNORE_DUP_KEY IGNORE_DUP_KEY ile için eşdeğerdir = on.

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

    • ON
      Dışarı-in-tarih İstatistikler değil otomatik olarak recomputed.

    • KAPALI
      Otomatik istatistik güncelleştirme etkinleştirilir.

    Otomatik istatistik güncelleştirme, off için STATISTICS_NORECOMPUTE küme geri yükleme için veya yürütmek update STATISTICS norecompute yan tümceolmadan.

    Önemli notÖnemli

    Dağıtım istatistik otomatik recomputation devre dışı bırakılması en iyi yürütme planları tabloilgili sorguları için malzeme sorgu iyileştiricisi engelleyebilir.

    Geriye dönük uyumlu sözdiziminde ile STATISTICS_NORECOMPUTE ile STATISTICS_NORECOMPUTE için eşdeğerdir = on.

  • DROP_EXISTING = {ON | OFF }
    Adlandırılmış, kümelenmiş ve kümelenmemiş preexisting bırakılan yeniden ve olduğunu belirtir.Varsayılan kapalı'dır.

    • ON
      Varolan dizin bırakılan 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ümleme düzeniveya dizin seçeneklerini belirtebilirsiniz.

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

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

    Geriye dönük uyumlu sözdiziminde ile DROP_EXISTING ile DROP_EXISTING için eşdeğerdir = on.

  • ÇEVRİMİÇİ = {ON | OFF }
    Temel alınan tablo ve ilişkili dizinler dizin işlemi sırasında sorguları ve veri değişikliği için kullanılabilir olup olmadığını belirtir.Varsayılan kapalı'dır.

    Not

    Çevrimiçi dizin işlemleri, yalnızca SQL Server kuruluş, Developer ve değerlendirme sürümleri.

    • ON
      Dizini işlem süresi için uzun süreli tablo kilitleri tutulmuyor.Ana dizin işlem aşamasında, bir hedefi paylaşım (Is) kilit yalnızca kaynak tablotutulur.Bu, sorgu veya temel tablo ve dizinleri devam etmek için güncelleştirmeler sağlar.İşlem başlangıcında, kilit paylaşılan (s) saat kaynak nesnesinde tutulur.İşlem saat, kısa bir süre için sonunda s (paylaşılan) kilit kümelenmemiş dizin oluşturulursa kaynak alındığını; ya da kümelenmiş dizin oluşturulduğunda veya çevrimiçi bırakılan ve kümelenmiş sch-m (şema değiştirme) kilit alım veya kümelenmemiş dizin şu anda oluşturulmaktadır.Yerel geçici tabloüzerinde bir dizin oluşturulduğunda çevrimiçi küme açık olamaz.

    • KAPALI
      Tablo kilitleri dizini işlem süresi için uygulanır.tabloşema değişikliği (Sch-m) kilit oluşturan, yeniden oluşturur, veya kümelenmiş dizindüşünceye veya yeniden oluşturur veya kümelenmemiş dizindüşünceye çevrimdışı dizin işlemi kapsar.Bu tüm kullanıcı erişimi için temel tablo işlemi süresince önler.kümelenmemiş dizin oluşturur bir çevrimdışı dizin işlem tablo kilit paylaşılan (s) kapsar.Bu güncelleştirmeler alttaki tablo engeller ancak select deyimleri gibi okuma işlemleri.

    Daha fazla bilgi için, bkz. Dizin Operations nasıl çevrimiçi çalışma.Kilitleri hakkında daha fazla bilgi için bkz: Kilit modları.

    Dizin, temp genel tablolarda dizinler dahil olmak üzere aşağıdaki özel durumlar dışında çevrimiçi oluşturulabilir:

    • xml dizin.

    • Yerel geçici tabloüzerinde dizin.

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

    • Devre dışı bırakılmış kümelenmiş dizinler.

    • lob veri türleri temel tablo içeriyorsa, kümelenmiş dizin: image, ntext, text,varchar(max), nvarchar(max), varbinary(max), and xml.

    • Kümelenmemiş dizin ile lob veri türü sütunlarındaki tanımlı.

      Not

      Benzersiz olmayan kümelenmemiş dizin tablo lob veri türleri içerir, ancak bu sütunlar hiçbiri olmayan ya da her iki anahtar dizini tanımındaki kullanılan çevrimiçi oluşturulabilir-anahtar (dahil) sütunlar.

    Daha fazla bilgi için, bkz. Çevrimiçi dizin işlemleri gerçekleştirme.

  • allow_row_locks = { on | OFF}
    Satır kilitleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

    • ON
      Satır kilitleri dizin erişirken izin verilir.Veritabanı Altyapısı Satır kilitleri ne zaman kullanılacağını belirler.

    • KAPALI
      Satır kilitleri kullanılmaz.

  • allow_page_locks = { on | OFF}
    sayfa kilitlemeleri izin verilip verilmeyeceğini belirtir.Varsayılan açık'tır.

    • ON
      Dizine erişirken, sayfa kilitlemeleri izin verilir.Veritabanı Altyapısı sayfa kilitlemeleri ne zaman kullanılacağını belirler.

    • KAPALI
      Sayfa kilitlemeleri kullanılmaz.

  • MAXDOP =max_degree_of_parallelism
    Geçersiz kılar parallelism en büyük ölçüdedizini işlem süresi içinyapılandırma seçeneği. maxdop paralel planı yürütme içinde kullanılan işlemci sayısını sınırlamak için kullanın.En fazla 64 işlemci ' dir.

    max_degree_of_parallelismaşağıdakilerden biri olabilir:

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

    • >1
      Belirtilen veya daha az geçerli sistem iş yükünün üzerinde temel bir paralel dizin işleminde kullanılan işlemcilerin en fazla sayısını sınırlar.

    • 0 (varsayılan)
      Gerçek işlemci sayısını veya geçerli sistem iş yükünün üzerinde göre daha az kullanır.

    Daha fazla bilgi için, bkz. Paralel dizin işlemleri yapılandırma.

    Not

    Paralel dizin işlemleri, yalnızca SQL Server kuruluş, Developer ve değerlendirme sürümleri.

  • DATA_COMPRESSION
    Belirtilen dizin, bölüm numarası veya aralık bölümleri için veri sıkıştırma seçeneği belirtir.Seçenekler aşağıdaki gibidir:

    • HİÇBİRİ
      Dizin veya belirtilen bölümleri sıkıştırılmaz.

    • 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 hakkında daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.

  • BÖLÜMLERİNDE () { <partition_number_expression> | <aralık>} ,...n )
    DATA_COMPRESSION ayar uygulanacağı bölümlerini belirtir.Dizin bölümlenmiş değil on bölüm bağımsız bir hata oluşturur.on bölüm yan tümce sağlanmazsa, DATA_COMPRESSION seçenek bölümlenmiş dizintüm bölümler için geçerlidir.

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

    • Numarası için bir bölüm, örneğin sağlar: DİSK (2).

    • Örneğin virgülle ayırarak birkaç tek tek bölümleri için bölüm numaraları sağlar: BÖLÜMLERİNDE (1, 5).

    • Örneğin aralıkları ve tek tek bölümleri sağlar: BÖLÜMLERİNDE (2, 4, 6-8).

    <aralık> örneğin word için ayrılmış bölüm numaraları olarak belirtilebilir: BÖLÜMLERİNDE (6-8).

    küme farklı türleri farklı bölümleri için veri sıkıştırması için DATA_COMPRESSION seçeneği birden fazla kez örneğin belirtin:

    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)
    )
    

Açıklamalar

create INDEX deyim herhangi bir sorgu gibi getirilmiştir.G/Ç işlemleri kaydetmek için query processor bir tablo taraması gerçekleştirmek yerine başka bir dizin tarama seçebilirsiniz.Sıralama işlemi, bazı durumlarda elemiş.Çok işlemcili bilgisayarlarda çalışan SQL Server 2005 Enterprise Edition veya SQL Server 2008, create INDEX kullanarak tarama gerçekleştirmek ve sıralama işlemleri ile diğer sorguları do. aynı şekilde dizin oluşturma ile ilgili daha fazla işlemciDaha fazla bilgi için, bkz. Paralel dizin işlemleri yapılandırma.

Veritabanı kurtarma modelini bulk-logged veya basit küme , create Index işlemi en az kaydedilebilir.Daha fazla bilgi için, bkz. Dizin işlemleri için bir kurtarma modeli seçme.

Geçici tablodizinleri oluşturulabilir.tablo bırakılan veya oturum sona erdirir, dizinler bırakılır.

Dizinler, genişletilmiş özellikleri destekler.Daha fazla bilgi için, bkz. Veritabanı nesneleri genişletilmiş özelliklerini kullanma.

Kümelenmiş dizinler

Verileri sıralama ve geçici bir kopyasını özgün tablo veya varolan kümelenmiş dizin verileri için veritabanında kullanılabilir olması için ek çalışma bırakarak bir tablo (yığın) kümelenmiş dizin oluşturma veya varolan bir kümelenmiş dizin yeniden oluşturmayı gerektirir.Daha fazla bilgi için, bkz. Dizin Disk alanı gereksinimleri belirleme.Kümelenmiş dizinler hakkında daha fazla bilgi için bkz: Kümelenmiş dizinler oluşturma.

Benzersiz dizinler

benzersiz dizin olmadığında, Veritabanı Altyapısı için her saat veri tarafından eklenir yinelenen değerleri denetlerbir INSERT işlemlerini.Yinelenen anahtar değerleri oluşturur INSERT işlemlerini geri alınmış ve Veritabanı Altyapısı görüntüler bir hata iletisi.INSERT işlemi çok sayıda değiştirir ancak yalnızca bir yinelenen neden olsa bile, bu doğrudur.Var olan bir benzersiz dizin ve IGNORE_DUP_KEY veri girmek için bir girişimde bulunulmaz ise küme on yan tümce değil, yalnızca benzersiz dizin ihlal satırları başarısız.Benzersiz dizinler hakkında daha fazla bilgi için bkz: Benzersiz dizinler oluşturma.

Bölümlenmiş dizinler

Bölümlenmiş dizinler oluşturulur ve bölümlenmiş tablolara benzer şekilde güncelleştirilir, ancak normal dizinler gibi ayrı bir veritabanı nesneleri olarak ele alınır.bölümlenmiş dizin olmayan bölümlenmiş bir tablo olabilir ve nonpartitioned bir dizin bölümlenmiş bir tablo olabilir.

bölümlenmiş tabloüzerinde bir dizin oluşturuyorsanız ve dizini yerleştirmek için dosya grubu belirtmezseniz, aynı şekilde alttaki tablodizin bölümlendirilir.Bu dizin, varsayılan olarak kendi temel tablo olarak aynı filegroups yerleştirilir ve aynı bölümleme düzeni bölümlenmiş tablo için aynı bölümleme sütunları kullanan durumdur.

Zaman kümelenmiş dizin bölümleme bir benzersiz olmayan, Veritabanı Altyapısı zaten belirtilmişse bölümleme sütunlar varsayılan olarak kümelenmiş dizin anahtarlarının listesini ekler.

Dizin oluşturulmuş görünümler bölümlenmiş tablolarda dizinler tablolarda 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 aynı şekilde kümelenmiş dizin olan tablo saklı olduğu veritabanında depolandığından, kümelenmiş dizin benzersiz bir görünüm oluşturma sorgu performansını artırır.sorgu iyileştiricisi sorgu yürütme hızlandırmak için dizin oluşturulmuş görünümler kullanabilirsiniz.Görünümü, sorgu o görünüm için yerine koyma dikkate alınacak en iyi duruma getiricisi için başvurulacak yok.

Bir dizinli görünüm oluşturmak için aşağıdaki adımları gereklidir görünümü başarılı uygulaması için kritik önem taşımaktadır:

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

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

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

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

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

Dizin oluşturulmuş görünümler için gerekli set seçenekleri

Aynı ifade değeri hesaplanırken farklı sonuçlar üretmek Veritabanı Altyapısı farklı seçeneklerini ayarlama değilse ne zaman sorgu yürütüldüğünde.CONCAT_NULL_YIELDS_NULL küme için ifade, Ayarla seçeneğini sonra**'abc'** + null null değeri döndürür. Ancak, aynı ifade CONCAT_NULL_YIEDS_NULL küme için off sonra üretir 'abc'.

Dizin oluşturulmuş görünümler görünüm doğru yönetilmesini ve tutarlı sonuçlaremin olmak için birkaç seçeneklerini ayarlama sabit değerleri gerektirir.set seçenekleri aşağıdaki tablo gösterilen değerlere küme olmalıdır gerekli değeriaşağıdaki koşullar gerçekleştiğindesütun :

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

  • Herhangi INSERT yoktur, güncelleştirme veya silme işlemi dizinli görünümiçinde yer alan herhangi bir tablo üzerinde gerçekleştirilen.toplu kopyalama, çoğaltmave dağıtılmış sorgular gibi işlemleri de buna dahildir.

  • dizinli görünüm tarafından sorgu iyileştiricisi sorgu planı üretmek için kullanılır.

    Seçeneklerini ayarlama

    Gerekli değer

    Varsayılan sunucu değerini

    Default

    ole DB ve odbc değer

    Default

    DB-Library değeri

    ANSI_NULLS

    ON

    ON

    ON

    KAPALI

    ANSI_PADDING

    ON

    ON

    ON

    KAPALI

    ANSI_WARNINGS *

    ON

    ON

    ON

    KAPALI

    ARITHABORT

    ON

    ON

    KAPALI

    KAPALI

    CONCAT_NULL_YIELDS_NULL

    ON

    ON

    ON

    KAPALI

    NUMERIC_ROUNDABORT

    KAPALI

    KAPALI

    KAPALI

    KAPALI

    QUOTED_IDENTIFIER

    ON

    ON

    ON

    KAPALI

    * Veritabanı Uyumluluk düzey 90 veya daha yüksek küme olduğunda ANSI_WARNINGS on olarak örtülü olarak ayarlanması ARITHABORT on olarak ayarlar.Veritabanı Uyumluluk düzey küme 80 veya daha önceki sürümlerde, ARITHABORT seçeneği açıkça küme açık olmalıdır.

Bir ole DB veya odbc sunucusu bağlantısı kullanıyorsanız, değiştirilmesi gerekir yalnızca ARITHABORT ayarı değerdir.Tüm DB-Library must değerleri küme doğru sunucu düzey kullanarak olmalıdır sp_configure veya uygulamayı kullanarak ayarlama komutu.Seçeneklerini ayarlama hakkında daha fazla bilgi için bkz: sql Server'da seçeneklerini kullanma.

Önemli notÖnemli

İlk dizinli görünüm veya hesaplanmış bir sütun üzerinde dizin sunucusunda herhangi bir veritabanı oluşturulur olarak ARITHABORT kullanıcı seçenek Sunucu çapında on olarak küme olması önerilir.

Deterministic işlevler

dizinli görünüm definition belirleyici olmalıdır.Bir görünüm seç listesinde, tüm, deterministic ifadeler ise yanı sıra nerede ve group by yan tümceleri, deterministic.Deterministic ifadeler her zaman bir özel küme , giriş değerleri ile değerlendirilir her saat aynı sonucu döndürür.Yalnızca deterministic işlevler deterministic ifadelerde katılabilir.Örneğin, her zaman herhangi verilen küme , üç parametre bağımsız değişkeni değerleri için aynı sonucu verdiği için dateadd işlev deterministic.getdate deterministic değil aynı bağımsız değişkeni, ancak her saat yürütülecek olan değişiklikleri verdiği değer ile her zaman çağrılır.Daha fazla bilgi için, bkz. Deterministic ve FUNCTION işlevleri.

Bir ifade float ifadeler içeriyorsa, deterministic bile kesin sonuç işlemci mimarisi ya da sürüm mikro kodları, bağlı olabilir.veri bütünlüğüsağlamak için bu tür ifadeler yalnızca olarak olmayan katılabilir -anahtar sütunlarının dizinlenmiş görünümler.Float ifadeler içermeyen deterministic ifadeleri kesin olarak adlandırılır.Yalnızca kesin deterministic ifadeler anahtar sütunları ve nerede katılmak veya group by yan tümcesi dizinlenmiş görünümler.

Use IsDeterministic özellik columnpropertygörünümü sütun deterministic olup olmadığını belirlemek içinişlev . Use IsPreciseşema bağlama ile görünümünde sütun deterministic kesin olup olmadığını belirlemek için columnproperty işlevözellik . columnproperty için geçersiz giriş doğru ise 1, yanlış ise 0 ve null döndürür.Bu sütun deterministic veya değil kesin değildir anlamına gelir.

Ek gereksinimler

Seçeneklerini ayarlayın ve deterministic işlev gereksinimleri yanı sıra, aşağıdaki gereksinimlerin karşılanması gerekir:

  • create INDEX yürütür kullanıcı görünümü sahibi olmalıdır.

  • Görünüm tanımını bir group by yan tümceiçeriyorsa, benzersiz kümelenmiş dizin anahtar yalnızca group by yan tümcetümcesinde belirtilen sütunlara başvurabilir.

  • Temel tabloları küme saat , tablo oluşturulur veya bu şema bağlamagörünümüyle tarafından başvurulamaz doğru seçeneklerini ayarlama olmalıdır.

  • İki parçalı adlarıyla tabloları başvurulan schema**.**tablename, görünüm tanımındaki.

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

  • İki bölümü adları tarafından kullanıcı tanımlı işlevler başvurulan schema**.**function.

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

  • Görünüm, yalnızca aynı veritabanında, diğer görünümler temel tabloları bulunmanız gerekir.

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

    COUNT(*)

    Satır KÜMESİ işlev

    Türetilmiş tablo

    iç birleştirmek

    DISTINCT

    STDEV, SAPMA, AVG

    float*, text, ntext, or image columns

    Alt sorgu

    tam metin yüklemler (içeren, freetext)

    Null olabilecek ifadeüzerinde TOPLA

    clr kullanıcı tanımlı toplu işlev

    ÜST

    MIN MAKS

    BİRLİĞİ

    * dizinli görünüm içerebilir float sütunları; Ancak, bu tür sütunları kümelenmiş dizin anahtareklenemez.

group by varsa, görünüm tanımını COUNT_BIG(*) içermeli ve HAVING içermemelidir.Bu grupla kısıtlamalar yalnızca dizinli görünüm tanımı için geçerlidir.Bu grupla kısıtlamalar karşılamıyor olsa bile, bir sorgu, yürütme planında bir dizinli görünüm kullanabilirsiniz.

Dizin oluşturulmuş görünümler bir bölümlenmiş tablooluşturulabilir ve kendilerini bölümlenebilir.bölümlemehakkında daha fazla bilgi için "Bölümlenmiş dizinler" bir önceki bölüme bakın.

Önlemek için Veritabanı Altyapısı kullanan dizin oluşturulmuş görünümler dahil seçeneği (GÖRÜNÜMLER genişletin) ipucu sorgu.Listelenen seçeneklerden herhangi biri yanlış küme, ayrıca bu iyileştirici dizinler üzerinde görünümler kullanmalarını engeller.SEÇENEK (GÖRÜNÜMLER genişletin) ipucu hakkında daha fazla bilgi için bkz: SELECT (Transact-SQL).

Veritabanı Uyumluluk düzey 80'den az olamaz.Bir uyumluluk düzey 80'den daha düşük bir dizinli görünüm içeren bir veritabanı değiştirilemez.

Filtre uygulanmış dizinler

Bir tablosatırları küçük bir yüzdesini seçtiğiniz sorguları için uygun en iyi duruma getirilmiş kümelenmemiş dizin, bir filtre uygulanmış dizindir.tabloveri bölümünü dizin için bir filtre yüklemi kullanır.İyi tasarlanmış bir filtre uygulanmış dizin sorgu performansını artırmak, depolama maliyetlerini düşürmek ve bakım maliyetlerini azaltır.

Filtre uygulanmış dizinler için gerekli set seçenekleri

set seçenekleri Required Value sütun , aşağıdaki durumlardan herhangi biri gerçekleştiğinde gerekiyor:

  • Filtre uygulanmış bir dizin oluşturun.

  • INSERT, update, delete veya birleştirme işlemi filtre uygulanmış dizin verileri değiştirir.

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

    Seçeneklerini ayarlama

    Gerekli değer

    ANSI_NULLS

    ON

    ANSI_PADDING

    ON

    ANSI_WARNINGS *

    ON

    ARITHABORT

    ON

    CONCAT_NULL_YIELDS_NULL

    ON

    NUMERIC_ROUNDABORT

    KAPALI

    QUOTED_IDENTIFIER

    ON

    * Veritabanı Uyumluluk düzey 90 veya daha yüksek küme olduğunda ANSI_WARNINGS on olarak örtülü olarak ayarlanması ARITHABORT on olarak ayarlar.Veritabanı Uyumluluk düzey küme 80 veya daha önceki sürümlerde, ARITHABORT seçeneği açıkça küme açık olmalıdır.

set seçenekleri doğru değilse, aşağıdakilerden oluşabilir:

  • Filtre uygulanmış dizin oluşturulmaz.

  • Veritabanı Altyapısı Bir hata üretir ve verileri değiştirir INSERT, update, delete veya birleştirme ifadeleri geri alırdizini.

  • Sorgu en iyi duruma getiricisi dizin içinde herhangi bir Transact -SQL deyimleri için yürütme planı dikkate almaz.

Filtre uygulanmış dizinler hakkında daha fazla bilgi için bkz: Filtre uygulanmış dizin tasarım yönergeleri.

Kayma dizinler

Kayma dizinler hakkında daha fazla bilgi için bkz: KAYMA Index (Transact-SQL) oluştur ve Kayma dizinler (veritabanı altyapısı) ile çalışma.

xml dizinler

xml hakkında bilgi Bkz: dizinler için xml Index (Transact-SQL) oluştur ve xml veri türü sütun dizinlerde.

Dizin anahtar boyutu

Bir dizin anahtar en büyük boyutu 900 bayttır.Dizinler üzerinde varchar , varolan veri sütunlarında saat dizini oluşturulur; 900 baytı aşan değil sütun 900 baytı aşamaz oluşturulabilir Ancak, ekleme veya güncelleştirme eylemleri toplam boyutunu 900 bayttan büyük neden sütunlar üzerinde başarısız olur.Daha fazla bilgi için, bkz. Dizin anahtarlarının en büyük boyutu.kümelenmiş dizin dizin anahtar içeremez varchar ayırma birimirow_overflow_data varolan verilere sahip sütunlar.kümelenmiş dizin oluşturulur, bir varcharsütun ve mevcut verilere olan IN_ROW_DATA ayırma birimi, sonraki Ekle veya sütun güncelletirme ilemlerini gönderme misiniz veri satır kapalı fail.Ayırma birimleri hakkında daha fazla bilgi için bkz: Tablo ve dizin organizasyon.

Kümelenmemiş dizinleri olmayan içerebilir-anahtar sütununu dizin yaprak düzey .Bu sütunları tarafından kabul Veritabanı Altyapısı Dizin anahtar boyutunu hesaplarken.Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin.

Hesaplanan sütunlar

Hesaplanan sütunlar üzerinde dizinler oluşturulabilir.Buna ek olarak, hesaplanan sütunlar özellik PERSISTED olabilir.Yani Veritabanı Altyapısı tablohesaplanan değerleri saklar ve hesaplanmış bir sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını güncelleştirir.Veritabanı Altyapısı , sütunüzerinde bir dizin oluşturur ve sorgu. Index başvurulan Bu kalıcı değerler kullanır

Hesaplanmış bir sütundizini oluşturmak için hesaplanmış bir sütun deterministic ve kesin olmalıdır.Ancak PERSISTED özellik kullanarak dizinlenebilir hesaplanmış sütunların içerileceğini türünü genişletir:

  • Hesaplanan sütunlar temel Transact-SQL ve clr işlevleri ve CLR kullanıcı tanımlı türü yöntemleri işaretlenmiş deterministic kullanıcı.

  • Hesaplanan sütunlar tarafından tanımlanan deterministic ifadeleri temel Veritabanı Altyapısı ancak günümüzdeki.

Hesaplanan sütunlar kalıcı küme için aşağıdaki set seçenekleri gerektirir.

Dizin oluşturma için tüm koşulları karşılayan sürece benzersiz veya birincil anahtar kısıtlaması hesaplanmış bir sütun içerebilir.Özellikle, hesaplanmış bir sütun deterministic ve kesin veya deterministic ve kalıcı olması gerekir.Determinism hakkında daha fazla bilgi için bkz: Deterministic ve FUNCTION işlevleri.

Hesaplanan sütunlar türetilen image, ntext, text, varchar(max), nvarchar(max), varbinary(max), ve xml veri türleri olabilir bir anahtar olarak dizine veya olmayan yer-anahtar sütun hesaplanan sütun veri türü dizin anahtar sütun olarak izin verilen veya olmayan olduğu sürece-anahtar sütun.Örneğin, birincil xml dizin üzerinde hesaplanan bir oluşturamazsınız xml sütun.Dizin anahtar boyutu 900 baytı aşıyorsa bir uyarı iletisi görüntülenir.

Bir hesaplanmış bir sütun üzerinde dizin oluşturma, INSERT'ın başarısız olmasına neden veya daha önce çalıştığı işlem güncelleştirin.Böyle bir hata alabilir ne zaman koyun aritmetik hata hesaplanan sütun sonuçlar .Örneğin, aşağıdaki tablobulunan sütunhesaplanan rağmencsonuçlar aritmetik hataya INSERTdeyim çalışır.

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

Bunun yerine, tablooluşturduktan sonra bir dizin hesaplanmış sütunoluşturursanız,c, aynı INSERTdeyim eder ş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. Dizinler üzerinde hesaplanan sütunlar oluşturma.

Dizin içinde sütunlar

Sorgu kapsayan sorgu performansını artırmak için kümelenmemiş dizin yaprakdüzey içeren sütunlar adlı olmayananahtar sütunlar eklenebilir. Yani, sorguda başvurulan tüm sütunların dizin ya da anahtar dahil veya olmayan-anahtar sütunlar.Bu sorgu iyileştiricisi dizin tarama gerekli tüm bilgileri bulmak sağlar; tablo ya da kümelenmiş dizin verileri erişilmez.Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin.

Dizin seçeneklerini belirtme

SQL Server 2005sunulan yeni dizin seçenekleri ve ayrıca seçenekleri belirlenmiş biçimini değiştirir.Geriye dönük uyumlu sözdiziminde WITH option_name WITH için eşdeğerdir ()<option_name > = on ). Ne zaman, dizin seçeneklerini küme , aşağıdaki kurallar geçerlidir:

  • Yeni dizin seçeneklerini yalnızca belirtilebilir WITH kullanarak (option_name)= on | OFF**)**.

  • Seçenekler, hem geriye dönük uyumlu ve yeni sözdizimi aynı deyimkullanarak belirtilemez.Örneğin, WITH belirtme ()DROP_EXISTING**,** çevrimiçi = on**)** deyim başarısız olmasına neden olur.

  • Bir xml dizin oluşturduğunuzda seçenekler ile kullanılarak belirtilmelidir (option_name)= on | OFF**)**.

DROP_EXISTING yan tümcesi

DROP_EXISTING yan tümce , dizini yeniden oluşturmak, eklemek veya sütun bırakın, seçeneklerini değiştirmek, sütun sıralama düzenideğiştirmek veya bölümleme düzeni veya dosya grubudeğiştirmek için kullanabilirsiniz.

Dizin, birincil anahtar veya benzersiz kısıtlama zorlar ve dizin tanımı herhangi bir şekilde değiştirilmez, dizini çıkarılır ve varolan sınırlamayı koruyarak yeniden oluşturulacak.Ancak, dizin tanımı değiştirilirse, deyim başarısız olur.BİRİNCİL anahtar veya benzersiz kısıtlama 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 bir kümelenmiş dizinya da yeniden açtığınızda aynı veya farklı küme tuşları, kümelenmemiş dizinleri olan bir tablo performansı arttırır.DROP_EXISTING yeni kümelenmiş diziniçin create INDEX deyim yürütme sonrasında eski kümelenmiş dizin drop INDEX deyim yürütme yerini alır.Bir kere kümelenmemiş dizinler yeniden oluşturulur ve sonra Dizin tanımı değiştiyse.Dizin tanımı aynı dizin adı, anahtar ve bölümleme sütunlar, benzersizliği öznitelikve sıralama düzeni özgün dizin olarak olduğunda yan tümce DROP_EXISTING kümelenmemiş dizinleri yeniden değil.

Kümelenmemiş dizinler veya yeniden olsun, bunlar her zaman kendi özgün dosya gruplarını veya bölümleme şemaları kalır ve özgün bölüm işlevleri kullanabilirsiniz.kümelenmiş dizin farklı dosya grubu ya da bölümleme düzeniyeniden oluşturulmasını, kümelenmemiş dizinleri ile yeni kümelenmiş dizinkonumunu çakıştığı taşınmaz.Bu nedenle, daha önce ' % s'dizin kümelenmiş dizinile hizalı kümelenmemiş dizinleri bile, bunlar artık kendisiyle hizalanmamış.bölümlenmiş dizinhizalamahakkında daha fazla bilgi için bkz: Bölümlenmiş dizinler için özel yönergeleri.

DROP_EXISTING yan tümce aynı dizin anahtar sütunları aynı sırada ve aynı artan veya azalan düzende kullanılan verileri yeniden sıralanmaz, Index deyim kümelenmemiş dizin ve çevrimiçi seçeneğini belirtmedikçe için off küme .kümelenmiş dizin devre dışı bırakılırsa, çevrimiçi olarak küme için off ile DROP_EXISTING ile dizin oluşturma işlemi gerçekleştirilmelidir.ÇEVRİMİÇİ olarak küme için off ile kümelenmemiş dizin devre dışı bırakılır ve bir kümelenmiş dizindevre dışı ile ilişkili değildir, DROP_EXISTING ile dizin oluşturma işlemi gerçekleştirilebilir veya on.

Dizinleri 128 uzanımı ile daha fazla bırakılan veya yeniden, Veritabanı Altyapısı defers gerçek sayfa deallocations ve kadar sonra ilişkili bunların kilitlerihareket tamamlama.Daha fazla bilgi için, bkz. Bırakarak ve büyük nesneler yeniden oluşturuluyor.

Çevrimiçi seçeneği

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

  • Temel tablo değiştirmiş, kesildi veya çevrimiçi dizin işlemi işleminde çalışırken bırakılan olamaz.

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

  • Bölümlenmiş dizinler çevrimiçi işlemler gerçekleştirilebilir ve içeren dizinler hesaplanmış sütunlar kalıcı veya sütunlar dahil.

Daha fazla bilgi için, bkz. Çevrimiçi dizin işlemleri gerçekleştirme.

Satır ve sayfa kilitleri seçenekleri

Zaman allow_row_locks = on ve allow_page_lock = on, satır, sayfa-, ve tablo-düzey kilitleri verilir dizine erişirken.Veritabanı Altyapısı Uygun kilit seçer ve kilit bir satır ya da sayfakilit gelen tablokilityükseltebileceği. Daha fazla bilgi için, bkz. Kilit yükseltme (veritabanı altyapısı).

Zaman allow_row_locks = off ve allow_page_lock = off, yalnızca bir tablo-düzey kilit dizine erişirken verilir.

Dizin kilitleme taneciklik yapılandırma hakkında daha fazla bilgi için bkz: Bir dizini için kilitleme özelleştirme.

Dizin bilgilerini görüntüleme

Dizinler hakkında bilgi dönmek için katalog görünümleri, sistem işlevlerive sistem saklı yordamlarıkullanabilirsiniz.Daha fazla bilgi için, bkz. Dizin bilgilerini görüntüleme.

Veri sıkıştırma

Veri sıkıştırma'nda açıklanan Sıkıştırılmış tablolar ve dizinler oluşturma.Göz önüne almanız gereken anahtar noktalar şunlardır:

  • Sıkıştırma, bir sayfaüzerinde depolanması daha fazla satır izin verebilirsiniz, ancak en büyük satır boyutunu değiştirmez.

  • Dizin olmayanyaprak sayfaları sayfa sıkıştırılmış değildir, ancak satır sıkıştırılabilir.

  • Her kümelenmemiş dizin , tek tek sıkıştırma ayarı vardır ve temel tablosıkıştırma ayarını devralmaz.

  • Bir yığında kümelenmiş dizin oluşturulduğunda, alternatif sıkıştırma durumu belirtilmediği sürece kümelenmiş dizin yığın sıkıştırılma durumunu devralır.

Bölümlenmiş dizinler için aşağıdaki kısıtlamalar geçerlidir:

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

  • alter INDEX <dizini> ...BÖLÜMÜ YENİDEN...sözdizimi, belirtilen dizin bölümünün yeniden oluşturur.

  • alter INDEX <dizini> ...İLE YENİDEN...Sözdizimi dizinin tüm bölümlerini yeniden oluşturur.

Nasıl sıkıştırılma durumunu değiştirme bir tablo, dizin veya bölüm etkileyeceğini değerlendirmek için kullanın sp_estimate_data_compression_savings saklı yordam.

İzinler

tablo veya Görünüm alter izni gerektirir.Kullanıcı üye olması sysadmin sabit sunucu rolü veya db_ddladmin ve db_owner veritabanı rolleri sabit.

Örnekler

A.Basit bir kümelenmemiş dizinoluşturma

Aşağıdaki örnek kümelenmemiş dizin oluşturur BusinessEntityID sütun Purchasing.ProductVendor tablo.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IX_ProductVendor_VendorID')
    DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID 
    ON Purchasing.ProductVendor (BusinessEntityID); 
GO

B.Basit kümelenmemiş bir bileşik dizinoluşturma

Aşağıdaki örnek üzerinde kümelenmemiş bir bileşik dizin oluşturur SalesQuota ve SalesYTD sütunlarından Sales.SalesPerson tablo.

USE AdventureWorks2008R2
GO
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IX_SalesPerson_SalesQuota_SalesYTD')
    DROP INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson ;
GO
CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD
    ON Sales.SalesPerson (SalesQuota, SalesYTD);
GO

C.Benzersiz bir kümelenmemiş dizinoluşturma

Aşağıdaki örnek üzerinde benzersiz bir kümelenmemiş dizin oluşturur Name sütun Production.UnitMeasure tablo.Dizini benzersizlik eklenen veriler üzerinde kullanılmasını zorunlu Name sütun.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name from sys.indexes
             WHERE name = N'AK_UnitMeasure_Name')
    DROP INDEX AK_UnitMeasure_Name ON Production.UnitMeasure;
GO
CREATE UNIQUE INDEX AK_UnitMeasure_Name 
    ON Production.UnitMeasure(Name);
GO

Aşağıdaki sorgu, varolan bir satırda, aynı değere sahip satır eklemek deneyerek benzersizlik kısıtlaması sınar.

--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());

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ştir IGNORE_DUP_KEY seçenek seçeneğini küme için önce ile geçici bir tablo birden çok satır ekleyerek ON ile yeniden seçeneğini küme için OFF.Tek bir satır eklenir #Testdeğer bir yinelenen kasıtlı olarak neden olacaktablo ikinci birden çok satır INSERTdeyim yürütüldüğünde. tablo satır sayısı eklenen satır sayısını döndürür.

USE AdventureWorks2008R2;
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ğıda INSERT deyim.

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

Number of rows

--------------

38

Gelen satırların eklenmesini dikkat edin benzersizlik kısıtlaması ihlal değilProduction.UnitMeasuretablo başarıyla eklenmiş. Bir uyarı verildi ve göz ardı yinelenen satır, ancak tüm hareket değil toplu geri.

Aynı ifadeleri yeniden ancak ile yürütülen IGNORE_DUP_KEY küme OFF.

USE AdventureWorks2008R2;
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ğıda INSERT deyim.

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 bu satırları hiçbiri Production.UnitMeasure tablo eklenen tablo yalnızca bir satır ihlal tablo olsa UNIQUE dizin kısıtlaması.

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

Aşağıdaki örnek düşünceye ve üzerinde varolan bir dizini yeniden oluşturur ProductIDsütun Production.WorkOrderkullanaraktablo DROP_EXISTING seçeneği.Seçenekler FILLFACTOR ve PAD_INDEX küme.

USE AdventureWorks2008R2;
GO
CREATE NONCLUSTERED INDEX IX_WorkOrder_ProductID
    ON Production.WorkOrder(ProductID)
    WITH (FILLFACTOR = 80,
        PAD_INDEX = ON,
        DROP_EXISTING = ON);
GO

F.Dizin üzerinde bir görünüm oluşturma

Aşağıdaki örnek, bu görünümü bir görünüm ve bir dizin oluşturur.İki sorgu dahil dizinli görünümkullanın.

USE AdventureWorks2008R2;
GO
--Set the options to support indexed views.
SET NUMERIC_ROUNDABORT OFF;
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,
    QUOTED_IDENTIFIER, ANSI_NULLS ON;
GO
--Create view with schemabinding.
IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL
DROP VIEW Sales.vOrders ;
GO
CREATE VIEW Sales.vOrders
WITH SCHEMABINDING
AS
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,
        OrderDate, ProductID, COUNT_BIG(*) AS COUNT
    FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o
    WHERE od.SalesOrderID = o.SalesOrderID
    GROUP BY OrderDate, ProductID;
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_V1 
    ON Sales.vOrders (OrderDate, ProductID);
GO
--This query can use the indexed view even though the view is 
--not specified in the FROM clause.
SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev, 
    OrderDate, ProductID
FROM Sales.SalesOrderDetail AS od
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
        AND ProductID BETWEEN 700 and 800
        AND OrderDate >= CONVERT(datetime,'05/01/2002',101)
GROUP BY OrderDate, ProductID
ORDER BY Rev DESC;
GO
--This query can use the above indexed view.
SELECT  OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev
FROM Sales.SalesOrderDetail AS od
    JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID
        AND DATEPART(mm,OrderDate)= 3
        AND DATEPART(yy,OrderDate) = 2002
GROUP BY OrderDate
ORDER BY OrderDate ASC;
GO

G.İle dizin oluşturma dahil (olmayan-anahtar) sütunlar

Aşağıdaki örnek, tek bir anahtarsütun kümelenmemiş dizin oluşturur (PostalCode) ve dört olmayan-anahtar sütunları (AddressLine1, AddressLine2, City, StateProvinceID). Dizin aşağıdaki tarafından kapsanan bir sorgudur.sorgu iyileştiricisitarafından üzerinde seçili dizini görüntülemek için sorgu menüde SQL Server Management Studioseçin Fiili yürütme planı görüntülemek sorgusunu yürütmeden önce.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
            WHERE name = N'IX_Address_PostalCode')
    DROP INDEX IX_Address_PostalCode ON Person.Address;
GO
CREATE NONCLUSTERED INDEX IX_Address_PostalCode
    ON Person.Address (PostalCode)
    INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
GO
SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN N'98000' and N'99999';
GO

H.bölümlenmiş dizinoluşturma

Aşağıdaki örnek üzerinde kümelenmemiş bir bölümlenmiş dizin oluşturur TransactionsPS1, varolan bir bölümleme düzeni.Bu örnekte, bölümlenmiş dizin örnek yüklü olduğu varsayılır.

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

Ö.Filtre uygulanmış dizin oluşturma

Aşağıdaki örnek, tabloProduction.BillOfMaterials filtre uygulanmış bir dizin oluşturur.Filtre yüklemi, filtre uygulanmış dizin anahtar sütunları olmayan sütunlar içerebilirsiniz.Bu örnekte yüklemi sadece boş olmayan bitiştarihi olduğu satırları seçer.

USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
    WHERE name = N'FIBillOfMaterialsWithEndDate' 
    AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithEndDate
    ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithEndDate"
    ON Production.BillOfMaterials (ComponentID, StartDate)
    WHERE EndDate IS NOT NULL;
GO

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, dizinin tüm bölümlerini satır sıkıştırması kullanılarak bölümlenmiş tablo üzerinde bir dizin oluşturur.

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

Aşağıdaki örnek, bölüme sayfa sıkıştırması kullanılarak bölümlenmiş tablo üzerinde bir dizin oluşturur 1 bölümlerindeki dizin ve satır sıkıştırma 2 ile 4 dizin.

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