Index (Transact-sql) oluştur

Belirtilen tablo veya Görünüm tablo üzerinde ilişkisel bir dizin oluşturur. Tabloda veri önce dizin oluşturulabilir. İlişkisel dizin tablo veya görünümlerin başka bir veritabanı üzerinde tam veritabanı adı belirterek 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: columnstore Index (Transact-sql) oluştur. Columnstore dizin oluşturma hakkında daha fazla bilgi için bkz: KAYMA Index (Transact-sql) oluştur.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

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

  • UNIQUE
    Bir tablo ya da görünüm üzerinde benzersiz bir dizin oluşturur. Benzersiz bir dizin içinde iki satır aynı dizin anahtar değeri izin verilen biridir. Bir görünümün kümelenmiş bir dizin benzersiz olmalıdır.

    Veritabanı AltyapısıIGNORE_DUP_KEY on olarak ayarlanmış olup olmadığını, yinelenen değerler içeren sütunlar benzersiz bir dizin oluşturma izin vermez. Bunu denediyseniz, Veritabanı Altyapısıbir hata iletisi görüntüler. Yinelenen değerleri, sütun veya sütunları üzerinde benzersiz bir dizin oluşturulmadan önce kaldırılmalıdır. Benzersiz bir dizin kullanılan sütunlar için değil ayarlanmalıdır benzersiz bir dizin oluşturulduğunda çoğaltmaları birden çok null değerleri kabul edilir çünkü null.

  • KÜMELENMİŞ
    Anahtar değerlerinin mantıksal sırası tablodaki karşılık gelen satırların fiziksel sırası belirler bir dizin oluşturur. Alt ya da yaprak, düzeyini Kümelenmiş dizin tablonun gerçek veri satırları içerir. Kümelenmiş bir dizin, bir tablo veya görünümü bir anda izin verilir.

    Bir görünümü ile benzersiz kümelenmiş dizin, dizin oluşturulmuş görünüm olarak adlandırılır. Benzersiz kümelenmiş dizin oluşturma bir fiziksel görünümü materializes. Diğer dizinler aynı görünüme tanımlanabilir önce benzersiz kümelenmiş dizin üzerinde bir görünüm oluşturulmalıdır. Daha fazla bilgi için, bkz. Dizin oluşturulmuş görünümler oluşturma.

    Kümelenmiş dizin, kümelendirilmemiş bir dizin oluşturmadan önce oluşturun. Kümelenmiş bir dizin oluşturduğunuzda varolan kümelendirilmemiş dizinler tablolarda yeniden oluşturulur.

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

    [!NOT]

    Yaprak düzeyini kümelenmiş bir dizin ve veri sayfaları çünkü tanım gereği aynı, kümelenmiş bir dizin oluşturup on kullanarak partition_scheme_nameya da on filegroup_nameyan etkili hamle tablo tabloyu oluşturulduğu filegroup yeni bölüm düzenini veya filegroup için. Belirli filegroups üzerinde tablolar veya dizin oluşturmadan önce hangi filegroups mevcuttur ve dizin için yeterli boş alan olması doğrulayın.

  • KÜMELENDİRİLMEMİŞ
    Mantıksal sıralama tablosu belirten bir dizin oluşturur. Kümelendirilmemiş dizin ile veri satırların fiziksel sırası, dizinlenmiş sıralarına bağımsızdır.

    Her tabloda dizinler nasıl oluşturulduğunu bakılmaksızın, en fazla 999 kümelendirilmemiş dizinler olabilir: PRIMARY key 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ümelendirilmemiş dizinler oluşturulabilir.

    nonclustered varsayılandır.

  • index_name
    Dizinin adıdır. Dizin adları bir tablo veya görünüm içinde benzersiz olmalıdır, ancak bir veritabanı içinde benzersiz olmaları 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 bir bileşik dizini oluşturmak için iki veya daha fazla sütun adlarını belirtin. Sonra parantez içinde sıralama-öncelik sırasına bileşik endeksi dahil edilecek sütunlar listesinde table_or_view_name.

    16 Sütun kadar bir tek bileşik endeksi anahtar birleştirilebilir. Bir bileşik endeksi anahtar tüm sütunları aynı tablo ya da görünüm olması gerekir. Birleştirilmiş dizin değerleriyle izin verilen en büyük boyutu 900 bayttır.

    Büyük nesne (lob) veri türleri sütunlar ntext, text, varchar(max), nvarchar(max), varbinary(max), xml, ya imageolarak bir dizin anahtar sütunları belirtilemez. Ayrıca, görünüm tanımı içeremez ntext, text, ya imagesütunları create INDEX deyimini başvurulan değildir 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, yöntemi etkinleştirilmelerinde kapalı bir kullanıcı tanımlı türü sütun 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 belirli dizin sütun için sıralama yönünü belirler. Varsayılan değer ASC'tur.

  • INCLUDE **(**column [ ,... n ] )
    Kümelendirilmemiş dizin yaprak seviyesine eklenecek anahtar olmayan sütunu belirler. Kümelendirilmemiş dizin benzersiz veya benzersiz olmayan olabilir.

    Sütun adları Ekle listesine yinelenemez ve aynı anda hem anahtar hem de anahtar olmayan sütunları olarak kullanılamaz. Kümelendirilmemiş dizinler her zaman tablo kümelenmiş bir dizin tanımlı Kümelenmiş dizin sütunları içerir. Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin oluşturmak.

    Tüm veri türleri dışında izin verilir text, ntext, ve image. Dizin oluşturulduğunda veya çevrimdışı yeniden (ONLINE = off) belirtilen anahtar olmayan sütunları herhangi biri olup olmadığını varchar(max), nvarchar(max), ya varbinary(max)veri türlerini.

    Hesaplanan sütunlar deterministic ve sütunlar veya imprecise hem de hassas olabilir. Hesaplanan sütunlar türetilen image, ntext, text, varchar(max), nvarchar(max), varbinary(max), ve xmlveri türleri eklenebilir anahtar olmayan sütunları hesaplanmış bir sütun veri türleri dahil bir sütun olarak izin verilen sürece. Daha fazla bilgi için, bkz. Hesaplanan sütun dizinlerde.

    xml dizin oluşturma hakkında daha fazla 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 tablo kümelendirilmemiş dizin olmalıdır. Filtre uygulanmış istatistikleri veri satırlarını filtre uygulanmış dizin oluşturur.

    Filtre yüklemi basit karşılaştırma mantığı kullanır ve hesaplanmış bir sütun, bir udt sütun, bir kayma veri türü sütun veya hierarchyID veri başvuru yapamazsınız sütun türü. null rakamları kullanılarak Karşılaştırmalar karşılaştırma işleçleri ile izin verilmez. IS null ve IS not null işleçleri kullanın.

    Filtre yüklemler için bazı örnekler Production.BillOfMaterialstablosu:

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

    WHERE ComponentID IN (533, 324, 753)

    WHERE StartDate IN ('20000404', '20000905') 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ş bir dizin bölümleri olan eşlenen filegroups tanımlayan bölüm düzenini belirtir. Bölüm düzeni ya da yürüterek veritabanı içinde varolmalıdır create PARTITION düzeni veya alter PARTITION düzeni. column_namehangi karşı bölümlenmiş bir dizin bölümlenmesi sütun belirtir. Bu sütunun veri türü, uzunluk, aynı olmalıdır ve hassas bağımsız bölüm işlev partition_scheme_namekullanıyor. column_nameDizin tanımı sütunlarda sınırlı değildir. Herhangi bir sütun temel tablo, benzersiz bir dizin bölümleme zaman hariç belirtilen column_namebenzersiz anahtar olarak kullanılan arasından seçilmelidir. Bu kısıtlama 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ş bir dizin bölümü ne zaman Veritabanı Altyapısızaten belirtilmezse, varsayılan, bölümleme sütununda Kümelenmiş dizin anahtarı, listesine ekler. Benzersiz olmayan, kümelendirilmemiş bir dizin böldüğünüzde Veritabanı Altyapısızaten belirtilmezse, bölümleme sütununda dizin anahtar olmayan (dahil) sütun olarak ekler.

    Eğer partition_scheme_nameya filegroupbelirtilen ve tablo bölümlenmiş, dizin aynı bölümleme sütununda, tablo kullanarak aynı bölüm düzenini yerleştirilir.

    [!NOT]

    Bir xml dizin bölümleme şemasını belirtemezsiniz. Temel tablo bölümlere ayrılmışsa, xml dizini tablo aynı bölüm düzenini kullanır.

    Dizinler bölümleme hakkında daha fazla bilgi için Bölümlenmiş tablolar ve dizinler.

  • ONfilegroup_name
    Belirtilen dizin belirtilen filegroup oluşturur. Hiçbir konumu belirtilir ve tablo veya görünümü olmayan bölümlenmiş dizini aynı filegroup temel tablo veya Görünüm kullanır. Filegroup önceden mevcut olmalıdır.

  • on "varsayılan''
    Belirtilen dizin varsayılan filegroup oluşturur.

    Bu kapsamda, terim varsayılan bir anahtar kelime değildir. Bu varsayılan filegroup tanımlayıcısı ve, içinde olarak ayrılmış gerekir "varsayılan" ya da on varsayılan**[]**. Eğer "varsayılan" belirtilmişse, quoted_ıdentıfıer seçeneği geçerli oturum için on 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ş bir dizin oluşturduğunuzda, tablo için FILESTREAM veri yerleştirme belirtir. FILESTREAM_ON yan farklı bir FILESTREAM filegroup veya bölüm düzeni Taşınacak FILESTREAM veri sağlar.

    filestream_filegroup_nameFILESTREAM filegroup adıdır. Filegroup filegroup için kullanılarak tanımlanmış bir dosya olmalıdır bir create database veya alter database deyimi; Aksi durumda, bir hata oluşturulur.

    Tablo bölümlere ayrılmışsa FILESTREAM_ON fıkra eklenmesi ve bir bölüm düzeni kullanan aynı bölüm işlevi ve bölümleme sütunları bölüm düzeni tablo FILESTREAM filegroups belirtmeniz gerekir. Aksi durumda, bir hata oluşturulur.

    Tablo bölümlere ayrılmışsa, FILESTREAM sütun bölümlenmesi edemiyor. FILESTREAM_ON yan tümcesinde belirtilen tek bir filegroup FILESTREAM veri tablosu depolanması gerekir.

    FILESTREAM_ON null bir create INDEX deyimi kümelenmiş bir dizin oluşturuluyor ve tablo FILESTREAM sütun içermiyor belirtilebilir.

    Daha fazla bilgi için, bkz. FILESTREAM (SQL Server).

<nesne>:: =

Dizin oluşturulacak tam veya nonfully nitelikli nesnedir.

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

  • schema_name
    Tablo veya görünümün ait olduğu şemanın adıdır.

  • 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ımlanmalıdır. Herhangi kümelendirilmemiş dizin oluşturulmadan önce benzersiz kümelenmiş dizin üzerinde 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 dolgusunu belirtir. Varsayılan değer OFF'tur.

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

    • KAPALI veya fillfactorbelirtilmemiş
      Orta düzey sayfalar kapasite near doldurulur, en büyük boyutu en az bir satır için yeterli boşluk bırakarak dizin, ara sayfalarında anahtarları kümesi düşünüyor olabilir.

    Sadece FILLFACTOR belirtilen PAD_INDEX FILLFACTOR tarafından belirtilen yüzde kullandığından PAD_INDEX seçeneği yararlıdır. FILLFACTOR için belirtilen yüzde bir satır için izin verecek kadar büyük değilse, Veritabanı Altyapısıdahili olarak minimum izin yüzde geçersiz kılar. Bir ara dizin sayfasındaki satır sayısı hiç az iki, ne olursa olsun değerinin ne kadar düşük olduğunu fillfactor.

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

  • FILLFACTOR **=**fillfactor
    Nasıl tam gösteren bir yüzdesini belirtir Veritabanı Altyapısıdizin oluşturma sırasında her dizin sayfasının yaprak düzeyini yapmak veya yeniden. fillfactorbir tamsayı değeri 1 ile 100 olmalıdır. Eğer fillfactor100, Veritabanı AltyapısıKapasite dolu yaprak sayfaları dizinleri oluşturur.

    FILLFACTOR ayar, yalnızca dizin oluşturulduğunda veya yeniden uygulanır. Veritabanı AltyapısıDeğil dinamik tutmak boş sayfalarda belirtilen yüzdesi. Dolgu etmeni ayarını görüntülemek için sys.indexes Katalog görünümü.

    Önemli notÖnemli

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

    Daha fazla bilgi için, bkz. Bir dizin için dolgu etmeni belirleme.

  • SORT_IN_TEMPDB = {ON | OFF }
    Geçici sıralama sonuçları depolamak belirtir tempdb. Varsayılan değer OFF'tur.

    • ON
      Dizin oluşturmak için kullanılan ara sıralama sonuçları depolanır tempdb. Bu, dizin oluşturmak için gereken süreyi azaltmak tempdb kullanıcı veritabanı disklerden farklı bir dizi olduğunu. Ancak, dizinin oluşturulması sırasında kullanılan disk alanı miktarını da artırır.

    • OFF
      Ara sıralama sonuçları, dizin ile aynı veritabanında depolanır.

    Kullanıcı veritabanında bir dizin oluşturmak için gereken alan ek olarak tempdb ara sıralama sonuçları tutmak için ek alan hakkında aynı miktarda olması gerekir. Daha fazla bilgi için, bkz. SORT_IN_TEMPDB seçeneği için dizinler.

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

  • IGNORE_DUP_KEY = {ON | OFF }
    Bir ekleme işlemi benzersiz bir dizine yinelenen anahtar değerleri eklemeye çalıştığında verilecek hata yanıtını belirtir. IGNORE_DUP_KEY seçeneği yalnızca dizin oluşturulduktan veya yeniden oluşturulduktan sonraki ekleme işlemlerine uygulanır. Yürütürken seçeneğin bir etkisi olmaz create INDEX, alter INDEX, veya güncelleştirme. Varsayılan değer OFF'tur.

    • ON
      Benzersiz bir dizine yinelenen anahtar değerleri eklendiğinde bir uyarı iletisi oluşur. Yalnızca benzersizlik kısıtlamasını ihlal eden satırlar hata verir.

    • OFF
      Benzersiz dizine yinelenen anahtar değerleri eklendiğinde bir hata iletisi oluşur. Tüm INSERT işlemi geri alınır.

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

    IGNORE_DUP_KEY değerini görüntülemek için, sys.indexes'i kullanın.

    WITH IGNORE_DUP_KEY, geriye doğru uyumluluk dizininde WITH IGNORE_DUP_KEY = ON ayarına denktir.

  • STATISTICS_NORECOMPUTE = {ON | OFF}
    Dağılım istatistiklerinin hesaplanıp hesaplanmayacağını belirtir. Varsayılan değer OFF'tur.

    • ON
      Güncelliğini yitirmiş istatistikler otomatik olarak yeniden hesaplanmaz.

    • OFF
      İstatistiklerin otomatik güncelleştirilmesi etkinleştirilir.

    Otomatik istatistik güncelleştirmeyi geri yüklemek için, STATISTICS_NORECOMPUTE ayarını OFF yapın veya UPDATE STATISTICS deyimini NORECOMPUTE yan tümcesi olmadan yürütün.

    Önemli notÖnemli

    Dağıtım istatistik otomatik recomputation devre dışı bırakılması en iyi yürütme planları tablo ilgili sorguları için malzeme çekme sorgu en iyi duruma getiricisi engelleyebilir.

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

  • DROP_EXISTING = {ON | OFF }
    Adlı, kümelenmiş veya kümelendirilmemiş preexisting bırakılan yeniden olduğunu belirtir. Varsayılan değer OFF'tur.

    • 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üm düzenini veya dizin seçeneklerini belirtebilirsiniz.

    • OFF
      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 DROP_EXISTING ile'için eşdeğerdir = on.

  • ONLINE = {ON | OFF }
    Alttaki tabloların ve ilişkili dizinlerin dizin işlemi sırasında sorgularda ve veri değiştirmede kullanılıp kullanılamayacağını belirtir. Varsayılan değer OFF'tur.

    [!NOT]

    Çevrimiçi dizin işlemleri her sürümünde kullanılamaz Microsoft SQL Server. SQL Server sürümleri tarafından desteklenen özelliklerin bir listesi için, bkz. SQL Server 2012 Sürümleri Tarafından Desteklenen Özellikler.

    • ON
      Uzun dönemli tablo kilitleri, dizin işlemi süresince tutulmaz. Dizin işlemini ana aşaması sırasında kaynak tabloda yalnızca bir Amaç Paylaşımı (IS) kilidi tutulur. Bu sorgu veya temel tablo ve dizinleri devam etmek için güncelleştirmeler sağlar. İşlem başlangıcında, (s) paylaşılan kilit kaynak nesne üzerinde çok kısa bir süre için tutulur. Kısa bir süre için operasyon sonunda bir s (paylaşılan) kilit kümelendirilmemiş dizin oluşturulursa kaynağını kazanılır; ya da bir sch-m (şema değiştirme) kilit ve kümelenmiş bir dizin oluşturulduğunda veya çevrimiçi bırakılan zaman kümelenmiş veya kümelendirilmemiş dizin oluşturulmuşsa kazanılır. Yerel geçici bir tabloda bir dizin oluşturulurken ONLINE ayarı ON yapılamaz.

    • OFF
      Dizin işlemi süresinde tablo kilitleri uygulanır. Kümelenmiş bir dizin oluşturan, yeniden oluşturan veya bırakan ya da kümelenmemiş bir dizini bırakan çevrimdışı bir dizin işlemi, tabloda bir Şema değiştirme (Sch-M) kilidir alır. Bu, işlem süresi boyunca alttaki tabloya tüm kullanıcı erişimini engeller. Kümelenmemiş bir dizin oluşturan çevrimdışı bir dizi işlemi tabloda Paylaşılan (S) bir kilit alır. Bu, alttaki tabloda güncelleştirme yapılmasını engeller ancak SELECT deyimleri gibi okuma işlemlerine izin verir.

    Daha fazla bilgi için, bkz. Nasıl çevrimiçi dizin işlemleri çalışma.

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

    • XML dizini

    • Yerel geçici tablo dizin.

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

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

    • lob veri türleri temel tablo içeriyorsa, kümelenmiş dizin: image, ntext, textve kayma türleri.

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

  • allow_row_locks = { on | KAPALI}
    Satır kilidi kullanılıp kullanılamadığını belirtir. ON varsayılan değerdir.

    • ON
      Dizine erişilirken satır kilitleri kullanılabilir. Satır kilitlerinin ne zaman kullanıldığını Veritabanı Altyapısı belirler.

    • OFF
      Satır kilitleri kullanılmaz.

  • allow_page_locks = { on | KAPALI}
    Sayfa kilidi kullanılıp kullanılamadığını belirtir. ON varsayılan değerdir.

    • ON
      Sayfa kilitlemeleri dizin erişirken izin verilir. Veritabanı AltyapısıNe zaman sayfa kilitleri kullanılır belirler.

    • OFF
      Sayfa kilitleri kullanılmaz.

  • MAXDOP =max_degree_of_parallelism
    Geçersiz kılan Maksimum ölçüde parallelism sunucu yapılandırma seçeneği yapılandırmakdizini işlem süresi için yapılandırma seçeneği. Paralel plan yürütmede kullanılan işlemci sayısını sınırlamak için MAXDOP kullanın. En fazla değer 64 işlemcidir.

    max_degree_of_parallelismaşağıdakilerden biri olabilir:

    • 1
      Paralel plan üretimini baskılar.

    • >1
      Paralel dizin işlemi için belirtilen veya geçerli sistem yüküne göre daha az kullanılan işlemci sayısını sınırlar.

    • 0 (varsayılan)
      Geçerli sistem iş yüküne bağlı olarak gerçek işlemci sayısını veya daha azını kullanır.

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

    [!NOT]

    Paralel dizin işlemleri her Microsoft SQL Server sürümünde bulunmaz. SQL Server sürümleri tarafından desteklenen özelliklerin bir listesi için, bkz. SQL Server 2012 Sürümleri Tarafından Desteklenen Özellikler.

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

    • NONE
      Dizin veya belirtilen bölümler sıkıştırılmaz.

    • ROW
      Dizin veya belirtilen bölümler satır sıkıştırma kullanılarak sıkıştırılır.

    • PAGE
      Dizin veya belirtilen bölümler sayfa sıkıştırma kullanılarak sıkıştırılır.

    Sıkıştırma hakkında daha fazla bilgi için bkz. Veri Sıkıştırma.

  • BÖLÜMLERİ ( { <partition_number_expression> | <range> } [ ,...n ] )
    DATA_COMPRESSION ayarının uygulandığı bölümleri belirtir. Dizin bölümlenmemişse, ON PARTITIONS bağımsız değişkeni bir hata üretir. ON PARTITIONS yan tümcesi sağlanmazsa, DATA_COMPRESSION seçeneği bölümlenmiş bir dizinin tüm bölümlerine uygulanır.

    <bölümleme_numarası_ifadesi> aşağıdaki biçimlerde belirtilebilir:

    • Bir bölümün numarasını sağlayın; örneğin: ON PARTITIONS (2).

    • Birkaç ayrı bölümlemenin bölüm numaralarını, virgüllerle ayırarak sağlayın; örneğin: ON PARTITIONS (1, 5).

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

    <Aralık> sözcüğü, örneğin ayrılmış bölüm numaraları olarak belirtilebilir: on BÖLÜMLERI (6-8).

    Farklı bölümlerde farklı veri sıkıştırma türleri ayarlamak için, DATA_COMPRESSION seçeneğini birden çok kez belirtin; örneğin:

    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)
    )
    
    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 deyimi, başka bir sorgu gibi getirilmiştir. Sorgu işlemci işlemlerini kaydetmek için bir tablo taraması gerçekleştirmek yerine başka bir dizin tarama seçebilirsiniz. Sıralama işlemi, bazı durumlarda bertaraf edilmesi. Çok işlemcili bilgisayarlarda create INDEX, tarama yapmak ve sıralama işlemleri gibi diğer sorguları dizin aynı şekilde oluşturma ile ilgili daha fazla işlemci kullanabilirsiniz. Daha fazla bilgi için, bkz. Parallel ındex işlemi yapılandırma.

Dizin oluşturma işlemi, minimal, veritabanı kurtarma modeli toplu veya basit olarak ayarlanırsa kaydedilebilir.

Dizinler üzerinde geçici bir tablo oluşturulabilir. Tablo bırakılan veya oturumu sona dizinler bırakılır.

Dizinler, genişletilmiş özellikleri destekler.

Kümelenmiş dizinler

Kümelenmiş dizin oluşturma tablo (yığın) veya bırakarak ve varolan bir kümelenmiş dizini yeniden oluşturma veri sıralama karşılamak için veritabanı veya özgün tablo veya varolan Kümelenmiş dizin verileri geçici bir kopyasını kullanılabilmesi için ek çalışma gerektirir. Kümelenmiş dizinler hakkında daha fazla bilgi için bkz: Kümelenmiş dizinler oluşturma.

Benzersiz dizinler

Benzersiz bir dizin varsa, Veritabanı AltyapısıÇekler için her zaman veri yinelenen değerleri eklenir ekleme işlemleri ile. Yinelenen anahtar değerleri oluşturmak istiyorsunuz ekleme işlemlerini geri haddelenmiş ve Veritabanı Altyapısıbir hata iletisi görüntüler. INSERT işlemi birçok satırları değiştirir ancak tek bir yinelenen neden bile bu durum geçerlidir. Girmek için bir girişimde yaptıysanız benzersiz bir dizin için hangi verileri var olan ve IGNORE_DUP_KEY yan tümcesi yalnızca benzersiz dizin başarısız ihlal satırları on olarak ayarlanır.

Bölümlenmiş dizinler

Bölümlenmiş dizinler oluşturulur ve bölümlenmiş tablolara benzer bir şekilde saklanır, ancak normal dizinler gibi onlar ayrı veritabanı nesneleri olarak işlenir. Bölümlenmiş bir dizin değil bölümlenmiş bir tabloya sahip olabilir ve nonpartitioned bir dizin bölümlenmiş bir tablo olabilir.

Bölümlenmiş bir tablo üzerinde bir dizin oluşturuyorsanız ve bir filegroup üzerinde yerleştirileceği dizin belirtmezseniz, temel tablo olarak aynı şekilde dizin bölümlendirilir. Bu dizin, varsayılan olarak kendi temel tablolarda aynı filegroups yerleştirilir ve aynı bölümleme sütunları kullanan aynı bölüm düzeni bölümlenmiş bir tablo için çünkü. Dizin tablo aynı bölüm düzenini ve bölümleme sütun kullandığında, dizin olduğunu uyumlu tablo.

Dikkat notuDikkat

1.000 adetten fazla bölümü olan bir tabloda hizalanmamış dizinler oluşturmak veya bunları yeniden oluşturmak olanaklıdır, ancak desteklenmez. Bunun yapılması, bu işlemler sırasında performansın düşmesine ve aşırı bellek tüketilmesine neden olabilir. Bölümlerin sayısı 1.000'i aştığında, yalnızca hizalanmış dizinler kullanmanızı öneririz.

Benzersiz olmayan, kümelenmiş bir dizin böldüğünüzde Veritabanı Altyapısızaten belirtilmişse herhangi bir bölümleme sütunlar varsayılan olarak Kümelenmiş dizin anahtarlarının, listesine ekler.

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

De SQL Server 2012, istatistik, tablodaki tüm satırlar bölümlenmiş bir dizin oluşturulduğunda veya yeniden tarayarak değil oluşturulur. Bunun yerine sorgu iyileştirici, istatistikleri üretmek için varsayılan örnekleme algoritmasını kullanır. Tablodaki tüm satırları tarayarak bölümlenmiş dizinler hakkında istatistik elde etmek için, CREATE STATISTICS veya UPDATE STATISTICS deyimini FULLSCAN yan tümcesiyle kullanın.

Filtre uygulanmış dizinler

Bir tablodan satırları küçük bir yüzdesi seçin sorguları için uygun, en iyi duruma getirilmiş bir kümelendirilmemiş dizin filtre uygulanmış bir dizindir. Bu dizin tablodaki verilerin bir kısmını filtre yüklemi kullanır. İyi tasarlanmış bir filtre uygulanmış dizin sorgu performansını artırmak, depolama maliyetlerini düşürür ve bakım maliyetlerini azaltır.

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

set seçenekleri Required Valuesütunu aşağıdaki koşullardan biri olduğunda gereklidir:

  • Filtre uygulanmış bir dizin oluşturun.

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

  • Sorgu en iyi duruma getiricisi sorgu yürütme planında filtre uygulanmış dizin kullanır.

    SET seçenekleri

    Gerekli değer

    ANSI_NULLS

    ON

    ANSI_PADDING

    ON

    ANSI_WARNINGS *

    ON

    ARITHABORT

    ON

    CONCAT_NULL_YIELDS_NULL

    ON

    NUMERIC_ROUNDABORT

    OFF

    QUOTED_IDENTIFIER

    ON

    Veritabanı uyumluluk düzeyi 90 veya daha yüksek olarak ayarlandığında ANSI_WARNINGS on olarak örtülü ayarı ARITHABORT on olarak ayarlar. Veritabanı uyumluluk düzeyi 80 veya daha önce ayarlarsanız, ARITHABORT seçeneği açıkça on olarak ayarlanmalıdır.

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

  • Filtre uygulanmış dizin oluşturulur.

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

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

Filtre uygulanmış dizinler hakkında daha fazla bilgi için bkz: Filtre uygulanmış dizinler oluşturma.

Kayma dizinler

Kayma dizinler hakkında daha fazla bilgi için bkz: KAYMA Index (Transact-sql) oluşturve Kayma dizinler genel bakış.

xml dizinler

xml hakkında bilgi bkz: dizinler için xml Index (Transact-sql) oluşturve xml dizinleri (SQL Server).

Dizin anahtar boyutu

Dizin anahtar en fazla 900 bayt boyutudur. Dizinler üzerinde varcharsütundaki varolan verileri dizini oluşturulur; anda 900 baytı aşamaz, 900 baytı aşamaz sütun oluşturulabilir Ancak, sonraki INSERT veya update işlemlerini toplam boyutunu 900 bayttan büyük neden sütunlar üzerinde başarısız olur. Kümelenmiş bir dizin dizin anahtarı içeremez varcharrow_overflow_data ayırma varolan veri sütunları unit. Kümelenmiş dizin üzerinde oluşturulan bir varcharsütun ve varolan verileri IN_ROW_DATA ayırma biriminde, sonraki INSERT veya update işlemlerini veri kapalı-satır itmek istiyorsunuz sütunu başarısız olur.

Kümelendirilmemiş dizinler dizin yaprak düzeyini anahtar olmayan sütunlar içerebilirsiniz. Bu sütunları tarafından kabul Veritabanı Altyapısıdizin anahtar boyutunu hesaplarken. Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin oluşturmak.

[!NOT]

Tablo bölümlendirilir, bölümleme anahtar sütunlar zaten bir benzersiz kümelenmiş dizin yoksa, bunlar tarafından dizine eklenir Veritabanı Altyapısı. Kombine boyutu (yok sayma sütunlar dahil) dizini oluşturulmuş sütunlar artı eklenen herhangi bir bölümleme sütunlar benzersiz kümelenmiş bir dizin içinde 1800 baytı aşamaz.

Hesaplanan sütunlar

Dizinler üzerinde hesaplanan sütunlar oluşturulabilir. Ayrıca, hesaplanmış sütunları PERSISTED özelliği olabilir. Bu demektir ki Veritabanı Altyapısıtablodaki hesaplanmış değerleri depolar ve hesaplanan sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını onları güncelleştirir. Veritabanı AltyapısıBu kalıcı değerleri sütun üzerinde bir dizin oluşturur ve dizin sorguda başvurulan kullanır.

Hesaplanmış bir sütun dizini için hesaplanmış bir sütun deterministic ve hassas gerekir. Ancak PERSISTED özelliğini kullanarak indekslenebilen hesaplanmış sütunların tipini genişletir.

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

  • Hesaplanan sütunlar tarafından tanımlanan deterministic ifadeleri temel Veritabanı Altyapısıancak imprecise.

Kalıcı hesaplanmış sütunları önceki bölümde "Gerekli set seçenekleri için dizinlenmiş görünümler" gösterildiği gibi ayarlamak için aşağıdaki set seçenekleri gerektirir.

UNIQUE veya PRIMARY key kısıtlaması dizin için tüm koşulları karşılayan olarak hesaplanmış bir sütun içerebilir. Özellikle, hesaplanmış bir sütun, deterministik ve kesin veya deterministik ve kalıcı olması gerekir. Determinizm hakkında daha fazla bilgi için bkz: Deterministik ve Nondeterministic işlevler.

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

Hesaplanmış bir sütun üzerinde dizin oluşturma ekleme başarısız olmasına neden veya daha önce çalışmış işlem güncelleştirin. Hesaplanan sütun aritmetik hata sonuçları böyle bir hata yer alabilir. Örneğin, aşağıdaki tabloda, her ne kadar sütunu hesaplanan csonuçları aritmetik hata INSERTdeyimi çalışır.

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

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

Bunun yerine, tablo oluşturduktan sonra eğer bir dizin hesaplanmış bir sütun üzerinde oluşturmak, c, aynı INSERTdeyimi başarısız olur artık.

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

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ütun dizinlerde.

Dizinler dahil sütunlar

Sütunlar, adlı sigara anahtar sütunları sorgu kapsayan tarafından sorgu performansını artırmak için kümelendirilmemiş dizin yaprak düzeyini eklenebilir. Başka bir deyişle, sorguda başvurulan tüm sütunların Dizin anahtar veya anahtar olmayan sütunu olarak eklenir. Bu dizin tarama tüm gerekli bilgileri bulmak sorgu iyileştirici verir; Tablo veya kümelenmiş dizin veri erişilebilir değil. Daha fazla bilgi için, bkz. Eklenen sütunlar ile dizin oluşturmak.

Dizin seçeneklerini belirtme

SQL Server 2005tanıtılan yeni dizin seçeneklerini ve ayrıca hangi seçenekleri belirlenmiş biçimini değiştirir. Geriye dönük uyumlu sözdiziminde WITH option_nameWITH için eşdeğerdir (<option_name>= on ). Dizin seçeneklerini ayarladığınızda, 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ı deyimi kullanarak belirtilemez. Örneğin, ile belirtme (DROP_EXISTING, ONLINE = on**)** deyimi başarısız olmasına neden olur.

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

DROP_EXISTING yan tümcesi

DROP_EXISTING yan tümcesi, dizin yeniden ekleyin veya sütun bırakın, seçeneklerini değiştirmek, sütun sıralama düzenini değiştirmek veya bölüm düzenini veya filegroup değiştirmek için kullanabilirsiniz.

Dizin PRIMARY key veya UNIQUE sınırlaması uygular ve Dizin tanımı herhangi bir şekilde değiştirilmez, dizin bırakılan ve varolan kısıtlaması koruyarak yeniden oluşturulacak. Dizin tanımı değişmiş ancak deyimi 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 açılan ve yeni tanımı ile kısıtlama ekleme.

DROP_EXISTING geliştirir performans ya da aynı veya farklı dizi anahtarları da olan bir tablo kümelenmiş bir dizin yeniden oluşturma zaman kümelendirilmemiş dizinler. DROP_EXISTING yeni kümelenmiş bir dizin için create INDEX deyimi yürütme ardından eski Kümelenmiş dizin üzerinde bir drop INDEX deyimi yürütme yerini alır. Bir kez, kümelendirilmemiş dizinler yeniden oluşturulur ve sonra eğer yalnızca dizin tanımı değişti. Dizin tanımı aynı dizin adı, anahtar ve bölümleme sütunlar, benzersiz özellik ve sıralama düzeni özgün dizin varsa DROP_EXISTING yan tümcesi kümelendirilmemiş dizinleri yeniden oluşturmak değil.

Kümelendirilmemiş dizinler veya yeniden ister, onlar her zaman kendi özgün filegroups veya bölüm düzeni kalır ve özgün bölüm işlevleri kullanın. Kümelenmiş bir dizin, farklı bir filegroup veya bölüm düzeni için oluşturulmuşsa, kümelendirilmemiş dizinler Kümelenmiş dizin yeni konumu ile aynı tarihte taşınmaz. Bu nedenle, daha önce Kümelenmiş dizin ile hizalı kümelendirilmemiş dizinler bile, onlar artık ile hizalı. Bölümlenmiş bir dizin hizalama hakkında daha fazla bilgi için bkz.

Aynı dizin anahtar sütunları aynı sırada ve aynı artan veya azalan düzende, kümelendirilmemiş dizin INDEX deyimi belirtir ve ONLINE seçeneği off için ayarlanmış olduğu sürece kullanılır DROP_EXISTING yan tümcesi verileri yeniden sıralanmaz. Kümelenmiş bir dizin devre dışı bırakılırsa, DROP_EXISTING ile dizin oluşturma işlemi için off ayarlamak ONLINE ile gerçekleştirilmelidir. Kümelendirilmemiş dizin devre dışı bırakılır ve devre dışı bırakılmış Kümelenmiş bir dizin ile ilişkili değildir, DROP_EXISTING ile dizin oluşturma işlemi için off ayarlamak ONLINE ile gerçekleştirilebilir veya on.

Dizinleri 128 uzantılar ile ya da daha fazla bırakılan veya yeniden, Veritabanı Altyapısıgirmesini hareketi tamamlar sonra gerçek sayfa deallocations ve bunların ilişkili kilitleri kadar erteledi.

ONLINE seçeneği

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

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

  • Dizin işlemi sırasında ek geçici disk alanı gereklidir.

  • 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 Kilitleme Seçenekleri

Ne zaman allow_row_locks = on ve allow_page_lock = on, satır, sayfa-, ve tablo düzeyi kilitleri dizin erişirken verilir. Veritabanı AltyapısıUygun kilit seçer ve gelen bir satır ya da sayfa kilidi bir tabloyu kilitlemek için kilit escalate.

Ne zaman allow_row_locks = off ve allow_page_lock = off, yalnızca bir tablo düzeyi kilitleme zaman izin verilen dizin erişme.

Dizin bilgilerini görüntüleme

Sistem saklı yordamları ve dizinler hakkında bilgi dönmek için katalog görünümleri, sistem işlevleri kullanabilirsiniz.

Veri Sıkıştırma

Veri sıkıştırma açıklanan konusunda Veri Sıkıştırma. Dikkate alınacak temel noktalar şunlardır:

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

  • Yaprak olmayan sayfaları dizin sıkıştırılmış sayfa değildir, ancak satır sıkıştırılmış olabilir.

  • Her kümelendirilmemiş dizini bir sıkıştırma ayarı vardır ve temel tablo sıkıştırma ayarını devralmaz.

  • Bir yığın kümelenmiş bir dizin oluşturduğunuzda bir alternatif sıkıştırma durumu belirtilmediği sürece Kümelenmiş dizin yığın sıkıştırılma durumunu devralır.

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

  • Tablonun hizalanmamış dizinleri varsa, tek bir bölümün sıkıştırma ayarını değiştiremezsiniz.

  • ALTER INDEX <dizin> ... REBUILD PARTITION ... sözdizimi, dizinin belirtilen bölümünü yeniden oluşturur.

  • ALTER INDEX <dizin> ... REBUILD WITH ... sözdizimi, dizinin tüm bölümlerini yeniden oluşturur.

Sıkıştırma durumunu değiştirme tablo, dizin veya bölüm nasıl etkileyeceğini değerlendirmek için sp_estimate_data_compression_savings saklı yordamı.

İzinler

Tablo veya görünümde ALTER izni gerektirir. Kullanıcı-meli var olmak a üye sysadmin sabit sunucu rolü veya db_ddladmin ve db_owner veritabanı rolleri sabit.

Örnekler

A.Basit bir kümelendirilmemiş dizin oluşturma

Aşağıdaki örnek kümelendirilmemiş dizin oluşturur VendorIDsütununda Purchasing.ProductVendor tablosu.

USE AdventureWorks2012;
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ümelendirilmemiş bileşik dizini oluşturma

Aşağıdaki örnek kümelendirilmemiş bileşik dizini oluşturur SalesQuotave SalesYTD sütunları Sales.SalesPersontablosu.

USE AdventureWorks2012
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 kümelendirilmemiş dizin oluşturma

Aşağıdaki örnek kümelendirilmemiş benzersiz bir dizin oluşturur Namesütununda Production.UnitMeasuretablosu. Benzersizliği, dizin içine eklenen veri Namesütun.

USE AdventureWorks2012;
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ır da aynı değeri içeren bir 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());

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

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

Aşağıdaki örnek etkisini gösterir IGNORE_DUP_KEYgeçici bir tabloya birden çok satır ayarlama seçeneği ile ilk ekleyerek seçeneği ONve yeniden ayarlamak seçenek OFF. Tek bir satır eklenir #Testkasıtlı bir yinelenen neden olacak tablo değeri ne zaman ikinci çoklu-satır INSERTdeyimi yürütüldüğünde. Tablodaki satır sayısı eklenen satır sayısını döndürür.

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

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

İşte ikinci sonuçları INSERTdeyimi.

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

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

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

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

Gelen satırları eklediğiniz haber Production.UnitMeasurebenzersiz kısıtlamayı ihlal değil tablo başarıyla eklenmiş. Bir uyarı ve yinelenen satır yok, ama tüm hareket geri alınmış değil.

Aynı ifadeleri tekrar, ama ile yürütülen IGNORE_DUP_KEYiçin OFF.

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

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

İşte ikinci sonuçları INSERTdeyimi.

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

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

Bildirim satırları hiçbiri Production.UnitMeasuretablo eklenen tabloya ihlal tabloda tek bir satır bile UNIQUEdizin 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 oluşturur ProductIDsütununda Production.WorkOrderkullanarak tablo DROP_EXISTINGseçeneği. Seçenekler FILLFACTORve PAD_INDEXde ayarlanır.

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

F.Bir dizin oluşturma

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

USE AdventureWorks2012;
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.(Anahtar olmayan) sütunlar ile dizin oluşturma

Aşağıdaki örnek kümelendirilmemiş dizin ile bir anahtar sütunu oluşturur (PostalCode) ve dört anahtar olmayan sütunu (AddressLine1, AddressLine2, City, StateProvinceID). Endeksi takip tarafından örtülü bir sorgudur. Sorgu iyileştirici seçili olduğunda dizini görüntülemek için sorgu menüde SQL Server Management Studioseçin Fiili yürütme planı görüntülemek sorguyu yürütmeden önce.

USE AdventureWorks2012;
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ş bir dizin oluşturma

Aşağıdaki örnek kümelendirilmemiş bölümlenmiş bir dizin oluşturur TransactionsPS1, varolan bir bölüm düzeni. Bu örnek, yüklü bölümlenmiş bir dizin örnek varsayar.

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

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 tablo için filtre uygulanmış bir dizin oluşturur. Filtre yüklemi, filtre uygulanmış dizin anahtar sütunları olan sütunlar içerebilir. Bu örnekte yüklem nerede bitiştarihi boş olmayan satırları seçer.

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

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

Aşağıdaki örnek, dizinin tüm bölümlerinde satır sıkıştırması kullanılarak bölümlenmiş bir tablo üzerinde bir dizin oluşturur.

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

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

Aşağıdaki örnek, bölüm sayfa sıkıştırması kullanılarak bölümlenmiş bir tablo üzerinde bir dizin oluşturur 1bölümlerindeki dizin ve satır sıkıştırma 2ile 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

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

Ayrıca bkz.

Başvuru

ALTER INDEX (Transact-SQL)

PARTITION FUNCTION (Transact-sql) oluştur

PARTITION düzeni (Transact-sql) oluştur

KAYMA Index (Transact-sql) oluştur

İstatistikler (Transact-sql) oluştur

Tablo (Transact-sql) oluştur

xml Index (Transact-sql) oluştur

Veri Türleri (Transact-SQL)

dbcc SHOW_STATISTICS (Transact-sql)

drop INDEX (Transact-sql)

sys.indexes (Transact-sql)

index_columns (Transact-sql)

kullanınsys.xml_indexesKatalog (Transact-sql)

eventdata (Transact-sql)

Kavramlar

xml dizinleri (SQL Server)