Aracılığıyla paylaş


TABLOYU DEĞIŞTIR index_option (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

ALTER TABLE kullanılarak oluşturulan bir kısıtlama tanımının parçası olan bir dizine uygulanabilecek bir dizi seçenek belirtir.

Dizin seçeneklerinin tam açıklaması için bkz. CREATE INDEX.

Transact-SQL söz dizimi kuralları

Syntax

{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ , ...n ] ) ]
  | ONLINE = { ON | OFF }
  | RESUMABLE = { ON | OFF }
  | MAX_DURATION = <time> [ MINUTES ]
}

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

<single_partition_rebuild__option> ::=
{
    SORT_IN_TEMPDB = { ON | OFF }
  | MAXDOP = max_degree_of_parallelism
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE } }
  | ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
}

<low_priority_lock_wait>::=
{
    WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
                           ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}

Arguments

PAD_INDEX = { ON | KAPALI }

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Dizin doldurmayı belirtir. Varsayılan değer: OFF.

  • ON

    tarafından FILLFACTOR belirtilen boş alan yüzdesi, dizinin ara düzey sayfalarına uygulanır.

  • OFF veya fillfactor belirtilmedi

    Ara düzey sayfalar, ara sayfalardaki anahtar kümesi göz önünde bulundurularak dizinin sahip olabileceği en büyük boyuta sahip en az bir satır için yeterli alan bırakarak kapasiteye yakın bir alana doldurulur.

FILLFACTOR = FILLFACTOR

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Veritabanı Altyapısı'nın dizin oluşturma veya değiştirme sırasında her dizin sayfasının yaprak düzeyini ne kadar tam yapması gerektiğini gösteren bir yüzde belirtir. Belirtilen değer 1 ile 100 aralığında bir tamsayı değeri olmalıdır. Varsayılan değer 0'dır.

Note

0 ve 100 dolgu faktörü değerleri her açıdan aynıdır.

IGNORE_DUP_KEY = { ON | KAPALI }

Ekleme işlemi benzersiz bir dizine yinelenen anahtar değerleri eklemeyi denediğinde yanıt türünü belirtir. seçeneği IGNORE_DUP_KEY yalnızca dizin oluşturulduktan veya yeniden oluşturulduktan sonra ekleme işlemleri için geçerlidir. SEÇENEĞIn CREATE INDEXyürütülürken, ALTER INDEXveya UPDATEhiçbir etkisi yoktur. Varsayılan değer: OFF.

  • 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 başarısız olur.

  • OFF

    Benzersiz bir dizine yinelenen anahtar değerleri eklendiğinde hata iletisi oluşur. İşlemin tamamı INSERT geri alınır.

IGNORE_DUP_KEY görünümde oluşturulan dizinler, benzersiz dizinler, XML dizinleri, uzamsal dizinler ve filtrelenmiş dizinler için olarak ayarlanamaz ON .

IGNORE_DUP_KEYgörüntülemek için sys.indexeskullanın.

Geriye dönük uyumlu söz diziminde, WITH IGNORE_DUP_KEYWITH IGNORE_DUP_KEY = ONeşdeğerdir.

STATISTICS_NORECOMPUTE = { ON | KAPALI }

Belirtilen dizinlerle ilgili istatistikler için otomatik istatistik güncelleştirme seçeneğini AUTO_STATISTICS_UPDATEdevre dışı bırakın veya etkinleştirin. Varsayılan değer: OFF.

  • ON

    Dizin yeniden oluşturulduğunda otomatik istatistik güncelleştirmeleri devre dışı bırakılır.

  • OFF

    Dizin yeniden oluşturulduğunda otomatik istatistik güncelleştirmeleri etkinleştirilir.

Otomatik istatistik güncelleştirmesini geri yüklemek için öğesini olarak ayarlayın veya yan tümcesi olmadan yürütür STATISTICS_NORECOMPUTEOFF.UPDATE STATISTICSNORECOMPUTE

Warning

İstatistiklerin otomatik olarak güncelleştirilmesini devre dışı bırakırsanız, Sorgu İyileştiricisi'nin tabloyu içeren sorgular için en uygun yürütme planlarını seçmesini engelleyebilir. Bu seçeneği tedbirli bir şekilde ve yalnızca uygun bir veritabanı yöneticisi tarafından kullanmanız gerekir.

Bu ayar, yeniden oluşturma işlemi sırasında dizinle ilgili istatistiklerin tam taramasını içeren otomatik bir güncelleştirmeyi engellemez.

ALLOW_ROW_LOCKS = { ON | KAPALI }

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Satır kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan değer ON'dır.

  • ON

    Dizine erişirken satır kilitlerine izin verilir. Veritabanı Altyapısı satır kilitlerinin ne zaman kullanılacağını belirler.

  • OFF

    Satır kilitleri kullanılmaz.

ALLOW_PAGE_LOCKS = { ON | KAPALI }

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Sayfa kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan değer ON'dır.

  • ON

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

  • OFF

    Sayfa kilitleri kullanılmaz.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | KAPALI }

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri

Son sayfa ekleme çekişmesi için iyileştirilip iyileştirilmeyeceğini belirtir. Varsayılan değer: OFF. Daha fazla bilgi için makalenin Sıralı anahtarlar bölümüne CREATE INDEX bakın.

SORT_IN_TEMPDB = { ON | KAPALI }

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Sıralama sonuçlarının içinde tempdbdepolanıp depolanmayacağını belirtir. Varsayılan değer: OFF.

  • ON

    Dizini oluşturmak için kullanılan ara sıralama sonuçları içinde tempdbdepolanır. Bu, kullanıcı veritabanından farklı bir disk kümesindeyse tempdb dizin oluşturmak için gereken süreyi azaltabilir. Ancak bu, dizin derlemesi sırasında kullanılan disk alanı miktarını artırır.

  • OFF

    Ara sıralama sonuçları dizinle aynı veritabanında depolanır.

ÇEVRİmİÇİ = { ON | KAPALI }

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Dizin işlemi sırasında sorgular ve veri değişikliği için temel tabloların ve ilişkili dizinlerin kullanılabilir olup olmadığını belirtir. Varsayılan değer: OFF. REBUILD bir ONLINE işlem olarak gerçekleştirilebilir.

Note

Benzersiz, kümelenmemiş dizinler çevrimiçi olarak oluşturulamaz. Bu, bir UNIQUE veya PRIMARY KEY kısıtlaması nedeniyle oluşturulan dizinleri içerir.

  • ON

    Uzun süreli tablo kilitleri dizin işlemi sırasında tutulmaz. Dizin işleminin ana aşamasında, kaynak tabloda yalnızca Bir Amaç Paylaşımı (IS) kilidi tutulur. Bu, temel alınan tablo ve dizinlerde sorguların veya güncelleştirmelerin devam etmelerini sağlar. İşlemin başlangıcında, kaynak nesnede kısa bir süre için Paylaşılan (S) kilidi tutulur. İşlemin sonunda, kısa bir süre için, bir kümelenmemiş dizin oluşturulursa kaynakta bir S (Paylaşılan) kilidi alınır; veya kümelenmiş dizin çevrimiçi oluşturulduğunda veya bırakıldığında ve kümelenmiş veya kümelenmemiş dizin yeniden oluşturulduğunda bir Sch-M (Şema Değişikliği) kilidi alınır. Çevrimiçi dizin kilitleri kısa meta veri kilitleri olsa da, özellikle Sch-M kilidi bu tabloda tüm engelleme işlemlerinin tamamlanmasını beklemelidir. Bekleme süresi boyunca, Sch-M kilidi aynı tabloya erişirken bu kilidin arkasında bekleyen diğer tüm işlemleri engeller. ONLINE yerel geçici tabloda bir dizin oluşturulurken olarak ayarlanamaz ON .

    Note

    Çevrimiçi dizin yeniden oluşturma, bu bölümün ilerleyen bölümlerinde açıklanan low_priority_lock_wait seçeneklerini ayarlayabilir. low_priority_lock_wait , çevrimiçi dizin yeniden oluşturma sırasında S ve Sch-M kilit önceliğini yönetir.

  • OFF

    Tablo kilitleri dizin işlemi sırasında uygulanır. Bu işlem sırasında temel alınan tabloya tüm kullanıcı erişimini engeller. Kümelenmiş dizini oluşturan, yeniden derleyen veya düşüren ya da kümelenmemiş bir dizini yeniden oluşturan veya düşüren, tabloda şema değişikliği (Sch-M) kilidi alan çevrimdışı dizin işlemi. Bu işlem sırasında temel alınan tabloya tüm kullanıcı erişimini engeller. Kümelenmemiş dizin oluşturan çevrimdışı dizin işlemi, tabloda Paylaşılan (S) kilidi alır. Bu, temel tablo güncelleştirmelerini engeller, ancak deyimler gibi SELECT okuma işlemlerine izin verir.

Daha fazla bilgi için bkz. çevrimiçi dizin işlemleri nasıl çalışır.

Note

Çevrimiçi dizin işlemleri Microsoft SQL Server'ın her sürümünde kullanılamaz. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. Sürümleri ve SQL Server 2022'nin desteklenen özellikleri.

RESUMABLE = { ON | KAPALI}

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler

bir ALTER TABLE ADD CONSTRAINT işleminin devam ettirilebilir olup olmadığını belirtir. ONtablo kısıtlaması ekleme işlemi devam ettirilebilir. OFFtablo kısıtlaması ekleme işlemi devam ettirilemez. Varsayılan OFF değeridir. RESUMABLE seçeneği olarak ONayarlandığında, seçeneği ONLINE = ON gereklidir.

MAX_DURATION ile RESUMABLE = ON kullanıldığında (gerektirir ONLINE = ON), duraklatılmadan önce devam ettirilebilir bir çevrimiçi ekleme kısıtlaması işleminin yürütüldüğünü belirten zamanı (dakika cinsinden belirtilen bir tamsayı değeri) gösterir. Belirtilmezse, işlem tamamlanmadan devam eder. MAXDOP ile de desteklenir RESUMABLE = ON .

Devam ettirilebilen ALTER TABLE ADD CONSTRAINT işlemleri etkinleştirme ve kullanma hakkında daha fazla bilgi için bkz. Devam ettirilebilir tablo ekleme kısıtlamaları.

MAXDOP = max_degree_of_parallelism

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Dizin işlemi sırasında en yüksek paralellik derecesi yapılandırma seçeneğini geçersiz kılar. Daha fazla bilgi için bkz . En yüksek paralellik derecesini yapılandırma (sunucu yapılandırma seçeneği). Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için kullanın MAXDOP . Maksimum değer 64 işlemcidir.

max_degree_of_parallelism olabilir:

  • 1: Paralel plan oluşturmayı bastırır.
  • >1: Paralel dizin işleminde kullanılan en fazla işlemci sayısını belirtilen sayıyla kısıtlar.
  • 0 (varsayılan): Geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanır.

Daha fazla bilgi için bkz. Paralel Dizin İşlemlerini Yapılandırma.

Note

Paralel dizin işlemleri Microsoft SQL Server'ın her sürümünde kullanılamaz. SQL Server sürümleri tarafından desteklenen özelliklerin listesi için bkz. Sürümleri ve SQL Server 2022'nin desteklenen özellikleri.

DATA_COMPRESSION

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

Belirtilen tablo, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:

  • NONE

    Tablo veya belirtilen bölümler sıkıştırılamaz. Yalnızca satır deposu tablolarına uygulanır; columnstore tablolarına uygulanmaz.

  • ROW

    Tablo veya belirtilen bölümler satır sıkıştırma kullanılarak sıkıştırılır. Yalnızca satır deposu tablolarına uygulanır; columnstore tablolarına uygulanmaz.

  • PAGE

    Tablo veya belirtilen bölümler sayfa sıkıştırma kullanılarak sıkıştırılır. Yalnızca satır deposu tablolarına uygulanır; columnstore tablolarına uygulanmaz.

  • COLUMNSTORE

    Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri

    Yalnızca columnstore tablolarına uygulanır. COLUMNSTORE seçeneğiyle sıkıştırılmış bir bölümün sıkıştırmasını kaldırmayı COLUMNSTORE_ARCHIVE belirtir. Veriler geri yüklendiğinde, COLUMNSTORE dizin tüm columnstore tabloları için kullanılan columnstore sıkıştırmasıyla sıkıştırılmaya devam eder.

  • COLUMNSTORE_ARCHIVE

    Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri

    Yalnızca kümelenmiş columnstore diziniyle depolanan tablolar olan columnstore tabloları için geçerlidir. COLUMNSTORE_ARCHIVE belirtilen bölümü daha küçük bir boyuta sıkıştırır. Bu, arşivleme için veya daha az depolama gerektiren ve depolama ve alma için daha fazla zaman ayırabilen diğer durumlarda kullanılabilir

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

XML_COMPRESSION

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Tablodaki xml veri türü sütunları için XML sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:

  • ON

    xml veri türünü kullanan sütunlar sıkıştırılır.

  • OFF

    xml veri türünü kullanan sütunlar sıkıştırılamaz.

ON PARTITIONS ( { <partition_number_expression> | <aralığı> } [ ,...n ] )

için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümler

DATA_COMPRESSION veya XML_COMPRESSION ayarlarının uygulandığı bölümleri belirtir. Tablo bölümlenmemişse, ON PARTITIONS bağımsız değişkeni bir hata oluşturur. ON PARTITIONS Yan tümcesi sağlanmamışsa veya DATA_COMPRESSION seçeneği bölümlenmiş XML_COMPRESSION tablonun tüm bölümleri için geçerlidir.

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

  • Bir bölümün numarasını girin, örneğin: ON PARTITIONS (2).
  • Virgülle ayrılmış birkaç bölüm için bölüm numaralarını sağlayın, örneğin: ON PARTITIONS (1, 5).
  • Hem aralıkları hem de tek tek bölümleri sağlayın, örneğin: ON PARTITIONS (2, 4, 6 TO 8).

<range>, to sözcüğüyle ayrılmış bölüm numaraları olarak belirtilebilir, örneğin: ON PARTITIONS (6 TO 8).

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

--For rowstore tables
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)
)

--For columnstore tables
REBUILD WITH
(
  DATA_COMPRESSION = COLUMNSTORE ON PARTITIONS (1, 3, 5),
  DATA_COMPRESSION = COLUMNSTORE_ARCHIVE ON PARTITIONS (2, 4, 6 TO 8)
)

<single_partition_rebuild__option>

Çoğu durumda, dizini yeniden oluşturmak bölümlenmiş dizinin tüm bölümlerini de yeniden oluşturur. Aşağıdaki seçenekler, tek bir bölüme uygulandığında tüm bölümleri yeniden oluşturmaz.

  • SORT_IN_TEMPDB
  • MAXDOP
  • DATA_COMPRESSION
  • XML_COMPRESSION

low_priority_lock_wait

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri

Bir SWITCH veya çevrimiçi dizin yeniden oluşturma işlemi, bu tablo için engelleme işlemi yapılmaz tamamlar. WAIT_AT_LOW_PRIORITY , veya çevrimiçi dizin yeniden oluşturma işlemi hemen tamamlanamazsa SWITCH bekler. İşlem düşük öncelikli kilitleri barındırarak DDL deyimiyle çakışan kilitleri tutan diğer işlemlerin devam etmelerini sağlar. WAIT AT LOW PRIORITY seçeneğinin atlanması, WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)eşdeğerdir.

MAX_DURATION = saat [ DAKİkA ]

Alınması gereken veya çevrimiçi dizinin yeniden derlenmesi için kilitlenen bekleme süresi (dakika cinsinden belirtilen tamsayı değeri), SWITCH DDL komutu yürütülürken bekler. SWITCH veya çevrimiçi dizin yeniden oluşturma işlemi hemen tamamlamayı dener. İşlem bu süre boyunca MAX_DURATION engellenirse, eylemlerden ABORT_AFTER_WAIT biri yürütülür. MAX_DURATION zaman her zaman dakika cinsindendir ve sözcük MINUTES atlanabilir.

ABORT_AFTER_WAIT = { YOK | SELF | ENGELLEYICILER }

  • NONE

    Kilit önceliğini değiştirmeden veya çevrimiçi dizin yeniden derleme işlemine devam eder SWITCH (normal önceliği kullanarak).

  • SELF

    Şu anda yürütülmekte olan SWITCH veya çevrimiçi dizin yeniden oluşturma DDL işleminden herhangi bir işlem yapmadan çıkar.

  • BLOCKERS

    İşlemin devam edebilmesi için şu anda SWITCH veya çevrimiçi dizin yeniden oluşturma DDL işlemini engelleyen tüm kullanıcı işlemlerini öldürür.

    BLOCKERS ALTER ANY CONNECTION izni gerektirir.