Share via


ALTER INDIS (Transact-SQL)

Varolan bir tablo veya Görünüm dizini değiştirir (ilişkisel ya da XML) devre dışı bırakma, yeniden veya yeniden düzenleme; dizin veya dizin. seçeneklerini ayarlayarak

Topic link iconTransact-SQL sözdizimi kuralları

ALTER INDEX { index_name | ALL }
    ON <object>
    { REBUILD 
        [ [PARTITION = ALL]
          [ WITH ( <rebuild_index_option> [ ,...n ] ) ] 
          | [ PARTITION = partition_number 
                [ WITH ( <single_partition_rebuild_index_option>
                        [ ,...n ] )
                ] 
            ]
        ]
    | DISABLE
    | REORGANIZE 
        [ PARTITION = partition_number ]
        [ WITH ( LOB_COMPACTION = { ON | OFF } ) ]
  | SET ( <set_index_option> [ ,...n ] ) 
    }
[ ; ]

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

<rebuild_index_option > ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor 
  | SORT_IN_TEMPDB = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { 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 ] ) ]
}
<range> ::= 
<partition_number_expression> TO <partition_number_expression>
}

<single_partition_rebuild_index_option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE } }
}

<set_index_option>::=
{
    ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
}

Bağımsız değişkenler

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

  • ALL
    İlişkili tablo veya Görünüm dizin türü ne olursa olsun tüm dizinleri belirtir.ALL belirtilmesi, deyim, bir veya daha fazla dizin çevrimdışı veya salt okunur bir dosya grubu içinde veya belirtilen işlem bir veya daha fazla dizin türlerinde izin vermesine neden olur.Aşağıdaki tablo, dizin işlemleri listeler ve dizin türleri izin verilmez.

    Bu işlemle ALL belirtme

    Bir veya daha fazla tablo varsa, başarısız

    YENİDEN ÇEVRİMİÇİ AÇIK OLAN =

    XML dizin

    Kayma dizini

    Sütun büyük nesne veri türü: image,text,ntext,varchar(max),nvarchar(max),varbinary(max), andxml

    BÖLÜMÜ YENİDEN = partition_number

    Nonpartitioned dizin, XML dizini, dizini kayma veya devre dışı dizin

    YENİDEN DÜZENLEME

    ALLOW_PAGE_LOCKS ile dizinleri küme için kapalı

    REORGANIZE BÖLÜM = partition_number

    Nonpartitioned dizin, XML dizini, dizini kayma veya devre dışı dizin

    IGNORE_DUP_KEY = AÇIK

    Kayma dizini

    XML dizin

    ÇEVRİMİÇİ AÇIK =

    Kayma dizini

    XML dizin

    ALL belirtilen ile PARTITION =partition_number, tüm dizinler hizalanmış.Yani, bunların karşılığı bölüm işlevlerine göre bölümlendirilir.Tüm kullanarak PARTITION ile neden aynı olan tüm dizin bölümleripartition_numberyeniden reorganized veya.Bölümlenmiş dizinler hakkında daha fazla bilgi için bkz:Bölümlenmiş tablolar ve dizinler.

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

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

  • table_or_view_name
    Tablo veya Görünüm dizini ile ilişkili adıdır.Bir nesne üzerinde bir rapor dizinleri görüntülemek için kullanınsys.indexes Katalog görünümü.

  • REBUILD [ WITH (<rebuild_index_option> [ ,... n]) ]
    Aynı sütun, dizin türü, öznitelik benzersiz ve sıralama düzeni düzenini kullanarak dizin yeniden oluşturulacak belirtir.Bu yan eşdeğerDBCC DBREINDEX.Devre dışı bırakılmış bir dizini yeniden etkinleştirir.Kümelenmiş bir dizini yeniden oluşturuluyor değil yeniden ilişkili kümelenmemiş dizinleri sürece ALL belirtilen anahtar sözcüğü.Dizin seçenekleri kullanılamaz belirtilen değerleri saklanan varolan dizin seçeneğisys.indexes uygulanır.Herhangi bir dizin seçeneği için değeri olmayan depolanırsys.indexes, seçenek bağımsız değişkeni tanımında belirtilen varsayılan ayar uygulanır.

    Ne zaman, yeniden XML dizin ya da bir kayma dizin seçenekleri çevrimiçi açık = ve IGNORE_DUP_KEY ON = geçerli değil.

    ALL belirtilirse temel alınan tablo yığın ise, yeniden oluşturma işlemi tablonun üzerinde etkisi yoktur.Tablo ile ilişkili tüm kümelenmemiş dizinler yeniden oluşturulur.

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

    Not

    Birincil XML dizini yeniden oluşturduğunuzda, temel kullanıcı tablosu dizini işlem süresi için kullanılamaz.

  • Bölüm
    Tek bir dizin bölümünü yeniden reorganized veya gerektiğini belirtir.PARTITION belirtilemezindex_namedeğil bir bölümlenmiş dizin.

    PARTITION tüm bölümlerin tümü yeniden =.

  • partition_number
    Is the partition number of a partitioned index that is to be rebuilt or reorganized.partition_number is a constant expression that can reference variables.These include user-defined type variables or functions and user-defined functions, but cannot reference a Transact-SQL statement.partition_number must exist or the statement fails.

  • İLE <(>single_partition_rebuild_index_option)
    SORT_IN_TEMPDB MAXDOP ve DATA_COMPRESSION olan tek bir bölümü yeniden oluşturduğunuzda seçenekler belirtilebilir (PARTITION = n).XML dizinlerin tek bir yeniden oluşturma işlemi tarif edilemez.

    Bölümlenmiş bir dizini yeniden çevrimiçi yapılamaz.Bu işlem sırasında tüm tabloyu kilitli.

  • Disable
    Dizini olarak kullanılamaz ve devre kullanımına işaretlerDatabase Engine.Bir dizini devre dışı bırakılabilir.Alt dizin verisi olmayan Sistem kataloğu devre dışı bırakılmış bir dizinin dizin tanım kalır.Kümelenmiş bir dizini devre dışı bırakma temel alınan tablo verileri kullanıcı erişimini engeller.Dizin, ALTER dizini yeniden OLUŞTURMANIZ veya CREATE INDEX ile DROP_EXISTING kullanın.Daha fazla bilgi için bkz:Dizinleri devre dışı bırakma.

  • YENİDEN DÜZENLEME
    Dizin yaprak belirtir düzey reorganized.Bu yan tümce eşdeğeri olanDBCC INDEXDEFRAG.ALTER INDEX yeniden düzenleme deyim her zaman çevrimiçi gerçekleştirilir.Yani uzun süreli durdurma tablosunu kilit yok tutulur ve ALTER INDEX yeniden düzenleme hareketi sırasında sorgu veya temel alınan tablo güncelleştirmelerini devam edebilirsiniz.devre dışı dizin veya dizin ALLOW_PAGE_LOCKS ile REORGANIZE belirtilemez küme için kapalı.

  • WITH**(** LOB_COMPACTION = { ON | OFF } )
    (LOB) büyük nesne verisi içeren tüm sayfaları düzenlenmiş belirtir.The LOB veri türleriimage,text,ntext,varchar(max),nvarchar(max),varbinary(max), andxml.Bu veri sıkıştırma, disk alanı kullanımını artırabilir.Varsayılan açık'tır.

    • AÇIK
      Büyük nesne verisi içeren tüm sayfaları sıkıştırılır.

      Belirli kümelenmiş dizin yeniden düzenleme, kümelenmiş dizinde bulunan tüm LOB sütunları düzenler.Bir kümelenmemiş dizin yeniden düzenleme (dahil) olmayan bir sütun dizinde tüm LOB sütunları düzenler.Daha fazla bilgi için bkz:Içerilen sütunlar ile dizinleri oluşturma.

      , ALL belirtilirse, belirtilen tabloyu veya görünümü ile ilişkilendirilmiş tüm dizinler reorganized ve kümelenmiş dizin, tablo ve sütunlar ile kümelenmemiş dizin ile ilişkili tüm LOB sütunları düzenlenmiş.

    • Kapalı
      Büyük nesne verisi içeren sayfaları düzenlenmiş değil.

      OFF yığın üzerinde etkisi yoktur.

    LOB_COMPACTION yan LOB sütunları yok sayılır.

  • SET ( <set_index option> [ ,... n] )
    Dizini yeniden düzenleme veya yeniden dizin seçeneklerini belirtir.küme için devre dışı dizin belirtilemez.

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

    • AÇIK
      FILLFACTOR tarafından belirtilen boş alan yüzdesini dizin ara düzeyinde sayfalara uygulanır.Aynı saat PAD_INDEX en FILLFACTOR belirtilmezse, ON, saklanan doldurma faktörü değeri ayarlanırsys.indexes is used.

    • KAPALI veya fillfactorbelirtilmemiş
      Ara düzey sayfalar için kapasite yakınında doldurulur.Bu dizine sahip olabileceği en büyük boyutu en az bir satır için yeterli alan bırakır temel küme ara sayfalarında anahtar.

    Daha fazla bilgi için bkz:INDIS (Transact-SQL) CREATE.

  • FILLFACTOR = fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or alteration.fillfactor must be an integer value from 1 to 100.Varsayılan 0'dur.

    Not

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

    Yalnızca, dizinin ilk oluşturulan yeniden veya açık bir FILLFACTOR ayarı uygulanır.The Database Engine does not dynamically keep the specified percentage of empty space in the pages.Daha fazla bilgi için bkz:INDIS (Transact-SQL) CREATE.

    doldurma faktörü ayarını görüntülemek için kullanınsys.indexes.

    Important noteImportant Note:

    Oluşturma veya kümelenmiş dizin FILLFACTOR değerle değiştirme etkiler verileri kaplar, depolama alanı içinDatabase Engineyeniden dağıtan verileri, oluşturduğu kümelenmiş dizin.

  • SORT_IN_TEMPDB = {ON | Kapalı }
    Sıralama sonuçlar saklamak verip belirtirtempdb.Varsayılan değer kapalı'dır.

    • AÇIK
      Dizin oluşturmak için kullanılan ara sıralama sonuçlar saklanırtempdb.Iftempdb kullanıcı veritabanı disklerden farklı bir dizi ise, bu bir dizin. oluşturmak için gereken süreyi azaltabilirsiniz Ancak, bu dizin oluşturma sırasında kullanılan disk alanı miktarını artırır.

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

    Sıralama işlemi gerekmiyorsa veya sıralama, belleğe yapılabilir, SORT_IN_TEMPDB seçeneği göz ardı edilir.

    Daha fazla bilgi için bkz:tempdb ve dizin oluşturma.

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

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

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

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

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

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

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

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

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

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

    Important noteImportant Note:

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

  • ONLINE**=** { ON | OFF}
    Temel tabloları ve ilişkili dizin sorguları ve veri değişikliği dizin işlemi sırasında kullanılabilir olup olmadığını belirtir.Varsayılan değer kapalı'dır.

    İçin bir XML dizin ya da kayma dizin, yalnızca çevrimiçi = OFF desteklenir, ve çevrimiçi ise küme ON bir hata ortaya çıkar.

    Not

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

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

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

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

    Global geçici tablolar, dizinler de dahil olmak üzere dizinler, aşağıdaki özel durumlar ile çevrimiçi yeniden:

    • Dizinleri devre dışı

    • XML dizinler

    • Yerel geçici tablolar dizinlerde

    • Bölümlenmiş dizinler

    • Veri türleri temel alınan tablo içeriyorsa, kümelenmiş dizin LOB

    • LOB verileri ile tanımlanan kümelenmemiş dizinleri sütunları girin.

    Kümelenmemiş dizinleri çevrimiçi tablo LOB veri türleri içerir, ancak bu sütunların hiçbiri anahtar ya da olmayan sütun dizini tanımındaki kullanılan yeniden oluşturulması.

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

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

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

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

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

    • Kapalı
      Sayfa kilitleri kullanılır.

    Not

    Dizin reorganized ALLOW_PAGE_LOCKS kapalı zaman.

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

    Important noteImportant Note:

    ALTER INDEX, MAXDOP seçeneği sözdizimi kayma bir dizin veya birincil XML dizini için tüm XML dizinler desteklenir, ancak şu anda yalnızca tek bir işlemci kullanır.

    max_degree_of_parallelism aşağıdaki gibi olabilir:

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

    • >1
      Belirtilen bir dizin paralel işleme için kullanılan işlemcilerin sayısı sınırlar.

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

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

    Not

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

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

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

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

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

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

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

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

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

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

    • Hem aralıkları ve her bölüm: (2, 4, 6 TO 8) BÖLÜMLERİNDEKİ.

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

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

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

Remarks

ALTER INDEX dizin yeniden veya farklı bir dosya grubu için taşımak için kullanılamaz.Bu deyim, ekleme veya sütun silme veya sütun sırasını değiştirme gibi dizin tanımını değiştirmek için kullanılamaz.CREATE INDEX ile DROP_EXISTING kullanan yan tümce bu işlemleri gerçekleştirmek için.

Bir seçenek açıkça belirtilen, geçerli ayarı uygulanır.Örneğin, FILLFACTOR ayarı yeniden yan tümcesinde belirtilmezse, sistem kataloğunda depolanan doldurma faktörü değeri yeniden oluşturma işlemi sırasında kullanılır.Geçerli dizin seçeneği ayarlarını görüntülemek için kullanınsys.indexes.

Not

ÇEVRİMİÇİ, MAXDOP ve SORT_IN_TEMPDB sistem katalogda depolanır.Dizin içinde belirtilmediği sürece deyim, seçeneğin varsayılan değeri kullanılır.

Çok işlemcili bilgisayarlarda, yalnızca diğer sorguları yapmak gibi ALTER INDEX yeniden otomatik olarak daha fazla işlemci dizini değiştirme ile ilgili işlemler sıralamak ve tarama gerçekleştirmek için kullanır., ALTER INDEX DÜZENLEYEBİLİRSİNİZ, veya LOB_COMPACTION, olmadan çalıştırdığınızdaen büyük ölçüde parallelism olan bir tek zincir operasyon. değer Daha fazla bilgi için bkz:Parallel ındex işlemi yapılandırma.

Dizin olamaz reorganized ya da içinde bulunduğu dosya grubu çevrimdışı olduğunda yeniden veya salt okunur ayarlayın.Çevrimdışı veya salt okunur bir dosya grubu ALL belirtilen anahtar ve bir veya daha fazla dizini olduğunda, ifadenin başarısız olur.

Dizinler yeniden oluşturuluyor

Dizini yeniden bırakır ve dizini yeniden oluşturur.Bu parçalanma kaldırır, disk alanı belirtilen veya varolan bir doldurma faktörü ayarları temel alan sayfaları düzenleme ile reclaims ve dizin satırları bitişik sayfaları yeniden sıralar.ALL belirtilirse, tablodaki tüm dizinleri bırakılan ve tek bir işlemde yeniden.yabancı anahtar kısıtlamaları önceden kesilmesine gerek yoktur.128 Kapsam veya daha fazla dizin yeniden oluşturulur,Database Enginedefers gerçek sayfa deallocations ve bunların ilgili Kilitleri, kadar sonra hareket işlemlerini.Daha fazla bilgi için bkz:Bırakma ve büyük nesneleri yeniden oluşturma.

Not

Genellikle küçük dizinleri yeniden düzenleme ya da yeniden parçalanma azaltmaz.Küçük dizin sayfaları karışık uzantılarına göre saklanır.Bu nedenle, küçük bir dizin içinde parçalanma yeniden düzenleme ya da yeniden azalabilir. karışık alanları en çok sekiz nesneler tarafından paylaşılır.Karma alanları, daha fazla bilgi için bkz:Anlama sayfaları ve alanları.

Önceki sürümlerindeSQL Server, bazen yeniden bir kümelenmemiş dizin donanım hatası. neden tutarsızlıkları düzeltmek içinInSQL Server 2008, hala çevrimdışı kümelenmemiş bir dizin yeniden tarafından dizini kümelenmiş dizin arasındaki tutarsızlıklar onarmak mümkün olabilir.Ancak, çevrimiçi dizin yeniden çevrimiçi yeniden oluşturma mekanizması varolan kümelenmemiş dizin yeniden oluşturma için temel olarak kullanmak ve böylece tutarsızlığı kalıcı kümelenmemiş dizin tutarsızlıkları onaramaz.Dizini, yeniden buna kümelenmiş dizin (veya yığın) tarama zorlamak ve böylece tutarsızlığı kaldırın.Daha önceki sürümleri gibi etkilenen veri bir yedek kopyadan geri yükleyerek tutarsızlıklar kurtarma önerilir; ancak, çevrimdışı kümelenmemiş dizin yeniden tarafından dizin tutarsızlıkların mümkün olabilir.Daha fazla bilgi için bkz:DBCC CHECKDB (Transact-SQL).

Dizinler yeniden düzenleme

Dizini yeniden düzenleme, en az sistem kaynağı kullanır.Kümelenmiş ve kümelenmemiş dizinleri tablolar ve görünümler üzerinde yaprak düzey fiziksel mantıksal, soldan sağa için sipariş yaprak düğümlerin aynı yaprak düzeyinde sayfaları yeniden birleştirir.Yeniden düzenleme, dizin sayfaları sıkıştırır.Sıkıştırma varolan doldurma faktörü değerine bağlıdır.doldurma faktörü ayarını görüntülemek için kullanınsys.indexes.

ALL olduğunda, belirtilen, ilişkili dizinler, kümelenmiş ve kümelenmemiş, ve tablo XML dizinlerde reorganized.Bazı kısıtlamalar ALL belirtildiğinde geçerlidir, ALL bağımsız değişkenleri bölümünde terimin tanımına bakın.

Daha fazla bilgi için bkz:Yeniden düzenleme ve dizinleri yeniden oluşturma.

Dizinleri devre dışı bırakma

Dizin devre dışı bırakma kullanıcı erişimini ve kümelenmiş dizinler, dizin temel alınan tablo verileri engeller.Dizin tanımı sistem kataloğunda kalır.Bir kümelenmemiş dizin ya da görünüm üzerinde kümelenmiş dizin fiziksel olarak devre dışı bırakma, dizin verileri siler.Kümelenmiş bir dizini devre dışı bırakmak için veri erişimi engeller, ancak dizin bırakılan veya yeniden verileri B-ağacı unmaintained kalır.Etkin veya devre dışı bırakılmış bir dizinin durumunu görüntülemek için queryis_disabled Katalog görünümü. sys.indexes sütun

Bir tablo içinde bir işlemsel kopyalama ise yayın, birincil anahtar sütunları ile ilişkili tüm dizinleri devre dışı bırakamazsınız.Bu dizin çoğaltma tarafından gereklidir.Dizin devre dışı bırakmak için önce yayından Tablo bırakma gerekir.Daha fazla bilgi için bkz:Yayımlama veri ve veritabanı nesneleri.

DİZİNİ yeniden OLUŞTURMANIZ ALTER deyim veya CREATE INDEX ile DROP_EXISTING deyimini dizinini etkinleştirmek için kullanın.Devre dışı bırakılmış kümelenmiş dizin yeniden çevrimiçi seçeneğiyle gerçekleştirilemez küme açık.Daha fazla bilgi için bkz:Dizinleri devre dışı bırakma.

Seçenekleri ayarlama

Yapabilecekleriniz küme yeniden ve yeniden düzenleyerek o dizin belirtilen bir dizin seçeneklerini ALLOW_ROW_LOCKS, ALLOW_PAGE_LOCKS, IGNORE_DUP_KEY ve STATISTICS_NORECOMPUTE.Değiştirilen değerleri hemen dizine uygulanır.Bu ayarları görüntülemek için kullanınsys.indexes.Daha fazla bilgi için bkz:Dizin seçeneklerini ayarlama.

Satır ve sayfa kilitleri seçenekleri

ALLOW_ROW_LOCKS = ON ve ALLOW_PAGE_LOCK = ON, Tablo düzey satır düzey ve sayfa düzeyinde kilit dizine erişim verilir.The Database Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock.

ALLOW_ROW_LOCKS = OFF ve ALLOW_PAGE_LOCK = OFF, yalnızca bir tablo düzey kilit dizine erişim verilir.Bir dizin için kilitleme parçalı ya da yapı yapılandırma hakkında daha fazla bilgi için bkz:Bir dizin için kilitleme özelleştirme.

ALL belirtilirse, satır veya sayfa kilit seçeneklerini olduğunda küme, küme tings tüm dizinlere uygulanır.temel alınan tablo, bir yığın olduğunda, ayarlar aşağıdaki şekilde uygulanır:

ALLOW_ROW_LOCKS = ON veya OFF

Yığın ve ilişkili tüm kümelenmemiş dizinler.

ALLOW_PAGE_LOCKS = AÇIK

Yığın ve tüm ilişkili kümelenmemiş dizinleri.

ALLOW_PAGE_LOCKS = OFF

Tam olarak kümelenmemiş dizinler için.Yani, tüm sayfa kilitleri kümelenmemiş dizinler üzerinde izin verilmez.Yalnızca paylaşılan (S), güncelleştirme (U) ve sayfa için özel (X) kilit öbek üzerinde izin verilmez.The Database Engine can still acquire an intent page lock (IS, IU or IX) for internal purposes.

Daha fazla bilgi için bkz:Kilit yükseltme (Veritabanı Altyapısı).

Çevrimiçi dizin işlemleri

Dizin ve çevrimiçi seçeneğini yeniden ON, alttaki nesneler, tablolar ve ilişkili dizinler, ayarlandığında, sorgu ve veri değişikliği için kullanılabilir.Özel tablo kilidi yalnızca bir çok kısa saat için değişikliği işlemi sırasında tutulur.

Dizini yeniden düzenleme her zaman çevrimiçi gerçekleştirilir.İşlem, kilitleri uzun vadede tutmak ve bu nedenle, sorgu veya çalışmakta olan güncelleştirmeler engellemez.

Aynı aynı anda çevrimiçi dizin işlemleri gerçekleştirebilir tablo yalnızca, aşağıdakileri yaparak:

  • Birden fazla kümelenmemiş dizinler oluşturuluyor.

  • Farklı dizinler aynı yeniden düzenleme tablo.

  • Farklı dizinler örtüşmeyen dizinler aynı tablo. yeniden oluşturma sırasında yeniden düzenleme

Aynı zamanda diğer tüm çevrimiçi dizin işlemlerinin başarısız.Örneğin, aynı iki veya daha fazla dizini yeniden olamaz tablo aynı anda, aynı varolan bir dizini yeniden oluşturma sırasında yeni bir dizin oluşturmak veya tablo.

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

Kayma dizin kısıtlamaları

Kayma bir dizini yeniden oluşturduğunuzda, kayma dizin şeması kilit tutan olduğundan temel kullanıcı tablo dizini işlem süresi için kullanılamaz.

Bu tabloya bir sütun üzerinde kayma bir dizin tanımlı sırasında kullanıcı tablosunda birincil anahtar kısıtlaması değiştirilemez.birincil anahtar kısıtlaması değiştirmek için ilk kayma her dizin tablo açılır.BİRİNCİL anahtar kısıtlaması değiştirdikten sonra her kayma dizinleri yeniden oluşturabilirsiniz.

Tek bir bölüm işlem yeniden, bir kayma dizin belirtilemez.Ancak bir tam bir bölümü yeniden kayma dizin belirtebilirsiniz.

Özel bir kayma dizin BOUNDING_BOX ya da IZGARA seçeneklerini değiştirmek için ya da DROP_EXISTING belirten bir CREATE KAYMA INDEX deyim kullanabilirsiniz = ON, kayma dizini bırakın ve yeni bir tane oluşturun.Bir örnek için bkz:KAYMA INDIS (Transact-SQL) CREATE.

Veri sıkıştırma

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

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

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

  • Kullandığınızda ALTER INDEX tüm...,tablo varsa, tek bir bölüm sıkıştırma ayarını değiştiremezsiniz nonaligned dizinler.

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

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

İzinler

Üzerinde az, bir ALTER iznine ALTER INDEX yürütülecek tablo veya Görünüm gereklidir.

Örnekler

C.Dizini yeniden oluşturuluyor

Aşağıdaki örnek, tek bir dizin oluştururEmployeeTablo.

B.Tüm dizinler üzerinde yeniden bir tablo ve seçeneklerini belirtme

Aşağıdaki örnek, anahtar belirtirALL.Bu tablo ile ilişkili tüm dizinleri yeniden oluşturur.Üç seçenek belirtildi.

C.LOB sıkıştırma taşıyan bir dizin yeniden düzenleme

Aşağıdaki örnek, tek kümelenmiş dizin reorganizes.Dizinde yaprak düzeyindeki LOB veri türü içerdiğinden, deyim de büyük nesne verisi içeren tüm sayfaları sıkıştırır.Varsayılan değer açık olduğundan ile (LOB_COMPACTION) seçeneğini belirleyerek gerekli olmadığına dikkat edin.

D.Dizin seçeneklerini ayarlama

Aşağıdaki örnek, dizin, birkaç seçenek ayarlarAK_SalesOrderHeader_SalesOrderNumber.

E.Bir dizini devre dışı bırakma

Devre dışı aşağıdaki örnekte bir kümelenmemiş dizin üzerinde bırakırEmployeeTablo.

F.Kısıtlamalar devre dışı bırakma

Aşağıdaki örnek birincil anahtar kısıtlaması birincil anahtar dizini devre dışı bırakarak devre dışı bırakır.yabancı anahtar kısıtlaması temel alınan tablo üzerinde otomatik olarak devre dışıdır ve uyarı iletisi görüntülenir.

Sonuç kümesi, bu uyarı iletisi verir.

Uyarı: Yabancı anahtar 'FK_EmployeeDepartmentHistory_Department_DepartmentID'

Tablo Tablo 'departman' başvuru'EmployeeDepartmentHistory '

'PK_Department_DepartmentID' dizini devre dışı bırakılması nedeniyle devre dışı bırakıldı.

G.Kısıtlamaları'nı etkinleştirme

Aşağıdaki örnek, örnek F. devre dışı bırakılan birincil anahtar ve yabancı anahtar kısıtlamaları etkinleştirir

birincil anahtar kısıtlaması, birincil anahtar dizini yeniden tarafından etkinleştirilir.

yabancı anahtar kısıtlaması sonra etkinleştirilir.

H.Yeniden bir bölümlenmiş dizin

Aşağıdaki örnek, bölüm numarası tek bir bölüm oluşturur5, bölümlenmiş dizininIX_TransactionHistory_TransactionDate.Bu örnek, bölümlenmiş dizin örnek yüklü olduğunu varsayar.Yükleme bilgileri için bkz:Readme_PartitioningScript.

USE AdventureWorks;
GO
-- Verify the partitioned indexes.
SELECT *
FROM sys.dm_db_index_physical_stats (DB_ID(),OBJECT_ID(N'Production.TransactionHistory'), NULL , NULL, NULL);
GO
--Rebuild only partition 5.
ALTER INDEX IX_TransactionHistory_TransactionDate
ON Production.TransactionHistory
REBUILD Partition = 5;
GO

I.Bir dizinin sıkıştırma ayarını değiştirme

Aşağıdaki örnek, nonpartitioned bir tabloda bir dizin oluşturur.

ALTER INDEX IX_INDEX1 
ON T1
REBUILD 
WITH ( DATA_COMPRESSION = PAGE )
GO

Ek veri sıkıştırma örnekleri için bkz:Sıkıştırılmış tablolar ve dizinler oluşturma.

Değişiklik Geçmişi

Güncelleştirilmiş içerik

REORGANIZE ile başarısız dizinleri devre dışı bırakılmış dizinleri kaldırın.