Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tablo veya görünümde ilişkisel dizin oluşturur. Kümelenmiş veya kümelenmemiş bir B ağacı dizini olduğundan satır deposu dizini olarak da adlandırılır. Tabloda veri olmadan önce bir satır deposu dizini oluşturabilirsiniz. Özellikle sorgular belirli sütunlardan seçim yaparken veya değerlerin belirli bir sırada sıralanması gerektiğinde sorgu performansını geliştirmek için bir rowstore dizini kullanın.
Not
Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, bellek için iyileştirilmiş tablolardaki columnstore dizinleri veya dizinleri için geçerli değildir. Daha fazla bilgi için
Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) şu anda benzersiz kısıtlamaları desteklememektedir. Benzersiz kısıtlamalara başvuran tüm örnekler yalnızca SQL Server, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği için geçerlidir.
Dizin tasarımı yönergeleri hakkında bilgi için SQL Server dizin tasarım kılavuzuna bakın.
Örnekleri:
Tablo veya görünümde kümelenmemiş dizin oluşturma
CREATE INDEX index1 ON schema1.table1 (column1);
Tabloda kümelenmiş dizin oluşturma ve tablo için 3 parçalı bir ad kullanma
CREATE CLUSTERED INDEX index1 ON database1.schema1.table1 (column1);
Benzersiz bir kısıtlamaya sahip bir kümelenmemiş dizin oluşturma ve sıralama düzenini belirtme
CREATE UNIQUE INDEX index1 ON schema1.table1 (column1 DESC, column2 ASC, column3 DESC);
Anahtar senaryosu:
SQL Server 2016'dan (13.x) başlayarak, Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde veri ambarı sorgu performansını geliştirmek için columnstore dizininde kümelenmemiş dizin kullanabilirsiniz. Daha fazla bilgi için bkz. Columnstore dizinleri - veri ambarı.
Ek dizin türleri için bkz:
- CREATE XML INDEX
- CREATE SPATIAL INDEX
- CREATE COLUMNSTORE INDEX
Transact-SQL söz dizimi kuralları
Sözdizimi
SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği söz dizimi
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.table_or_view_name | schema_name.table_or_view_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 }
| STATISTICS_INCREMENTAL = { ON | OFF }
| DROP_EXISTING = { ON | OFF }
| ONLINE = { ON [ ( <low_priority_lock_wait> ) ] | OFF }
| RESUMABLE = { ON | OFF }
| MAX_DURATION = <time> [MINUTES]
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE }
[ ON PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ]
}
<filter_predicate> ::=
<conjunct> [ AND ] [ ...n ]
<conjunct> ::=
<disjunct> | <comparison>
<disjunct> ::=
column_name IN (constant ,...n)
<comparison> ::=
column_name <comparison_op> constant
<comparison_op> ::=
{ IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< }
<low_priority_lock_wait>::=
{
WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ] ,
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}
<range> ::=
<partition_number_expression> TO <partition_number_expression>
Geriye dönük uyumlu ilişkisel dizin
Önemli
Geriye dönük uyumlu ilişkisel dizin söz dizimi yapısı, SQL Server'ın gelecekteki bir sürümünde kaldırılacaktır. Yeni geliştirme çalışmalarında bu söz dizimi yapısını kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın. Bunun yerine <relational_index_option>'de belirtilen söz dizimi yapısını kullanın.
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
}
Azure Synapse Analytics ve Paralel Veri Ambarı söz dizimi
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON [ database_name . [ schema ] . | schema . ] table_name
[ORDER (column[,...n])]
[WITH ( DROP_EXISTING = { ON | OFF } )]
[;]
CREATE [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON [ database_name . [ schema ] . | schema . ] table_name
( { column [ ASC | DESC ] } [ ,...n ] )
WITH ( DROP_EXISTING = { ON | OFF } )
[;]
Bağımsız değişken
EŞSİZ
Tablo veya görünümde benzersiz bir dizin oluşturur. Benzersiz dizin, iki satırın aynı dizin anahtarı değerine sahip olmasına izin verilmeyen dizindir.
Veritabanı Altyapısı, olarak ayarlanıp ayarlanmadığı IGNORE_DUP_KEY
fark etmeksizin, yinelenen değerler içeren sütunlarda benzersiz bir dizin oluşturulmasına ON
izin vermez. Bu denenirse, Veritabanı Altyapısı bir hata iletisi görüntüler. Sütun veya sütunlarda benzersiz bir dizin oluşturulabilmesi için önce yinelenen değerlerin kaldırılması gerekir.
Kısıtlama UNIQUE
bir değer olarak ele alır NULL
. Sütun null atanabilirse ve sütunda bir UNIQUE
kısıtlama varsa, en fazla bir NULL
satıra izin verilir.
KÜMELENMİŞ
Dizin anahtarı sütunları için belirtilen sıralama düzeninin diskteki dizin yapısındaki sayfa düzenini belirlediği bir dizin oluşturur. Kümelenmiş dizinin alt veya yaprak düzeyindeki sayfalardaki satırlar her zaman tablonun tüm sütunlarını içerir. Dizinin üst düzeylerindeki sayfalardaki satırlar yalnızca anahtar sütunları içerir.
Bir tabloda yalnızca bir kümelenmiş dizin olabilir. Bir tabloda kümelenmiş dizin varsa, tablodaki tüm verileri içerir. Kümelenmiş dizini olmayan bir tablo yığın olarak adlandırılır.
Benzersiz kümelenmiş dizine sahip görünüme dizinli görünüm adı verilir. Dizine alınan bir görünümde yalnızca bir kümelenmiş dizin olabilir. Görünümde benzersiz bir kümelenmiş dizin oluşturmak görünümü fiziksel olarak gerçekleştirir. Diğer dizinlerin aynı görünümde tanımlanabilmesi için önce görünümde benzersiz bir kümelenmiş dizin oluşturulmalıdır. Daha fazla bilgi için bkz. Dizinli görünümler oluşturma.
Kümelenmemiş dizinler oluşturmadan önce kümelenmiş dizini oluşturun. Tablolardaki mevcut kümelenmemiş dizinler, kümelenmiş dizin oluşturulduğunda yeniden oluşturulur ve bu da tablo büyükse yoğun kaynak gerektiren bir işlemdir.
CLUSTERED
belirtilmezse, kümelenmemiş bir dizin oluşturulur.
Not
Kümelenmiş dizin tablodaki tüm verileri içerdiğinden, kümelenmiş dizin oluşturma ve or ON filegroup_name
yan tümcesini kullanmaON partition_scheme_name
, tabloyu, tablonun oluşturulduğu dosya grubundan yeni bölüm düzenine veya dosya grubuna etkili bir şekilde taşır. Belirli dosya gruplarında tablo veya dizin oluşturmadan önce, hangi dosya gruplarının kullanılabilir olduğunu ve dizin için yeterli boş alana sahip olduklarını doğrulayın.
Bazı durumlarda, kümelenmiş dizin oluşturmak daha önce devre dışı bırakılmış dizinleri etkinleştirebilir. Daha fazla bilgi için bkz . Dizinleri ve kısıtlamaları etkinleştirme ve Dizinlerive kısıtlamaları devre dışı bırakma.
KÜMELENMİDİ
Dizin anahtarı sütunları için belirtilen sıralama düzeninin diskteki dizin yapısındaki sayfa düzenini belirlediği bir dizin oluşturur. Kümelenmiş dizinin aksine, kümelenmemiş dizinin yaprak düzeyindeki sayfalardaki satırlar yalnızca dizin anahtarı sütunlarını içerir. İsteğe bağlı olarak, anahtar olmayan sütunların bir alt kümesi yan tümcesi INCLUDE
kullanılarak eklenebilir.
Dizinlerin nasıl oluşturulduğundan bağımsız olarak her tabloda 999'a kadar kümelenmemiş dizin olabilir: örtük olarak ve UNIQUE
kısıtlamalarıyla PRIMARY KEY
veya açıkça ile.CREATE INDEX
Dizinli görünümler için, kümelenmemiş dizinler yalnızca önceden tanımlanmış benzersiz kümelenmiş dizine sahip bir görünümde oluşturulabilir.
Aksi belirtilmediyse, varsayılan dizin türü kümelenmemiştir.
index_name
Dizinin adı. Dizin adlarının bir tablo veya görünüm içinde benzersiz olması gerekir, ancak veritabanında benzersiz olması gerekmez. Dizin adları
sütun
Dizinin temel aldığı sütun veya sütunlar. Belirtilen sütunlardaki birleştirilmiş değerlerde bileşik dizin oluşturmak için iki veya daha fazla sütun adı belirtin. bileşik dizine eklenecek sütunları sıralama önceliği düzeninde, table_or_view_namesonra parantez içinde listeleyin.
En fazla 32 sütun tek bir bileşik dizin anahtarında birleştirilebilir. Bileşik dizin anahtarındaki tüm sütunlar aynı tablo veya görünümde olmalıdır. Birleştirilmiş dizin değerlerinin izin verilen en büyük boyutu kümelenmiş dizin için 900 bayt veya kümelenmemiş dizin için 1.700'dür. Sınırlar, SQL Veritabanı ve SQL Server 2016 (13.x) öncesi sürümler için 16 sütun ve 900 bayttır.
ntext, CREATE INDEX
başvurulmuyor olsa bile ntext, metin veya görüntü sütunları içeremez.
Tür ikili sıralamayı destekliyorsa CLR kullanıcı tanımlı tür sütunlarında dizinler oluşturabilirsiniz. Yöntemler belirleyici olarak işaretlendiğinden ve veri erişim işlemleri gerçekleştirmediği sürece, kullanıcı tanımlı bir tür sütunundan yöntem çağrıları olarak tanımlanan hesaplanan sütunlarda dizinler de oluşturabilirsiniz. CLR kullanıcı tanımlı tür sütunlarının dizinini oluşturma hakkında daha fazla bilgi için bkz. CLR kullanıcı tanımlı türler.
[ ASC | DESC ]
Belirli bir dizin sütunu için artan veya azalan sıralama yönünü belirler. Varsayılan değer: ASC
.
INCLUDE (sütun [ ,... n ] )
Kümelenmemiş dizinin yaprak düzeyine eklenecek anahtar olmayan sütunları belirtir. Kümelenmemiş dizin benzersiz veya benzersiz olmayabilir.
Sütun adları listede tekrarlanamaz INCLUDE
ve hem anahtar hem de anahtar olmayan sütunlar olarak aynı anda kullanılamaz. Tabloda kümelenmiş bir dizin tanımlanmışsa, kümelenmemiş dizinler her zaman örtük olarak kümelenmiş dizin sütunlarını içerir. Daha fazla bilgi için bkz. Eklenen sütunlarla dizin oluşturma.
metin, ntextve resimdışında tüm veri türlerine izin verilir. SQL Server 2012'den (11.x) başlayarak, Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde, belirtilen anahtar olmayan sütunlardan herhangi biri varchar(max), nvarchar(max)veya varbinary(max) veri türleriyse dizin, seçeneği kullanılarak ONLINE
oluşturulabilir veya yeniden oluşturulabilir.
Belirleyici ve kesin veya kesin olmayan hesaplanan sütunlar dahil edilebilir. Hesaplanmış sütun veri türü dahil edilen sütun olarak izin verebildiği sürece görüntü, ntext, metin, varchar(max), nvarchar(max), varbinary(max)ve xml veri türlerinden türetilen hesaplanan sütunlar eklenebilir. Daha fazla bilgi için bkz. Hesaplanan sütunlardaki dizinler.
XML dizini oluşturma hakkında bilgi için bkz. CREATE XML INDEX
WHERE <filter_predicate>
Dizine hangi satırların dahilleneceğini belirterek filtrelenmiş bir dizin oluşturur. Filtrelenen dizin, tablodaki kümelenmemiş bir dizin olmalıdır. Filtrelenmiş dizindeki veri satırları için filtrelenmiş istatistikler oluşturur.
Filtre koşulu basit karşılaştırma mantığı kullanır ve hesaplanan sütuna, kullanıcı tanımlı veri türü (UDT) sütununa, uzamsal veri türü sütununa veya hierarchyid veri türü sütununa başvuramaz. Karşılaştırma işleçlerini kullanan değişmez değerlerle NULL
karşılaştırmalara izin verilmez. Bunun yerine IS NULL
ve IS NOT NULL
işleçlerini kullanın.
Production.BillOfMaterials
tablosu için filtre koşullarının bazı örnekleri aşağıda verilmiştir:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Filtrelenmiş dizinler XML dizinlerine ve tam metin dizinlerine uygulanmaz. Dizinler için UNIQUE
yalnızca seçili satırların benzersiz dizin değerleri olmalıdır. Filtrelenmiş dizinler IGNORE_DUP_KEY
seçeneğine izin vermez.
ON partition_scheme_name ( column_name )
Bölümlenmiş dizinin bölümlerinin eşlendiği dosya gruplarını tanımlayan bölüm düzenini belirtir. bölüm düzeni, CREATE PARTITION SCHEME veya ALTER PARTITION SCHEMEyürüterek veritabanında bulunmalıdır. column_name dizinin bölümleme sütununu belirtir. Bu sütun, partition_scheme_name'nin kullandığı bölüm işlevinin bağımsız değişkeninin veri türü, uzunluğu ve duyarlığıyla eşleşmelidir. column_name dizin tanımındaki sütunlarda sınırlı değildir. Temel tablodaki herhangi bir sütun belirtilebilir, ancak benzersiz bir dizini bölümleme dışında, benzersiz anahtar olarak kullanılanlar arasından column_name seçilmelidir. Bu kısıtlama, Veritabanı Altyapısı'nın yalnızca tek bir bölümdeki anahtar değerlerinin benzersizliğini doğrulamasını sağlar.
Not
Benzersiz olmayan, kümelenmiş bir dizini bölümlediğinizde, Veritabanı Altyapısı varsayılan olarak bölümleme sütununu kümelenmiş dizin anahtarları listesine (henüz belirtilmemişse) ekler. Benzersiz olmayan, kümelenmemiş bir dizini bölümlerken, Veritabanı Altyapısı bölümleme sütununu henüz belirtilmemişse dizinin anahtar olmayan (dahil) sütunu olarak ekler.
partition_scheme_name veya dosya grubu belirtilmezse ve tablo bölümlenmişse dizin, temel alınan tabloyla aynı bölümleme sütunu kullanılarak aynı bölümleme düzenine yerleştirilir.
Not
XML dizininde bölümleme düzeni belirtemezsiniz. Temel tablo bölümlenmişse, XML dizini tabloyla aynı bölüm düzenini kullanır.
Dizinleri bölümleme, Bölümlenmiş tablolar ve dizinler hakkında daha fazla bilgi için.
ON filegroup_name
Belirtilen dosya grubunda belirtilen dizini oluşturur. Konum belirtilmezse ve tablo veya görünüm bölümlenmemişse, dizin temel tablo veya görünümle aynı dosya grubunu kullanır. Dosya grubu zaten var olmalıdır.
ON [default]
Tablo veya görünümle aynı dosya grubunda veya bölüm düzeninde belirtilen dizini oluşturur.
Bu bağlamda terimi default
bir anahtar sözcük değildir. Tablo veya görünümün dosya grubu veya bölümlenmiş düzeni için bir tanımlayıcıdır ve veya ON [default]
içinde ON "default"
olduğu gibi sınırlandırılmalıdır. belirtilirse "default"
, QUOTED_IDENTIFIER
seçeneği geçerli oturum için olmalıdır ON
. Bu varsayılan ayardır. Daha fazla bilgi için bkz. set QUOTED_IDENTIFIER
Not
bağlamında CREATE INDEX
"default"
ve [default]
veritabanı varsayılan dosya grubunu belirtmeyin. Temel tablo veya görünüm tarafından kullanılan dosya grubunu veya bölüm düzenini belirtir. Bu, tablosundan CREATE TABLE
farklıdır ve [default]
tabloyu veritabanı varsayılan dosya grubuna yerleştirir"default"
.
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
Kümelenmiş dizin oluşturulduğunda tablo için FILESTREAM verilerinin yerleşimini belirtir.
FILESTREAM_ON
yan tümcesi, FILESTREAM verilerinin farklı bir FILESTREAM dosya grubuna veya bölüm düzenine taşınmasını sağlar.
filestream_filegroup_name, FILESTREAM dosya grubunun adıdır. Dosya grubu,
Tablo bölümlenmişse, FILESTREAM_ON
yan tümcesi eklenmelidir ve tablonun bölüm düzeniyle aynı bölüm işlevini ve bölüm sütunlarını kullanan FILESTREAM dosya gruplarının bölüm düzenini belirtmelidir. Aksi takdirde bir hata oluşur.
Tablo bölümlenmemişse FILESTREAM sütunu bölümlenemez. Tablonun FILESTREAM verileri, FILESTREAM_ON
yan tümcesinde belirtilen tek bir dosya grubunda depolanmalıdır.
FILESTREAM_ON NULL
, kümelenmiş dizin oluşturulmaktaysa ve tabloda FILESTREAM sütunu yoksa CREATE INDEX
deyiminde belirtilebilir.
Daha fazla bilgi için bkz. FILESTREAM (SQL Server).
nesne<>::=
Dizine eklenecek tam veya uygun olmayan nesne.
database_name
Veritabanının adı.
schema_name
Tablo veya görünümün ait olduğu şemanın adı.
table_or_view_name
Dizine eklenecek tablonun veya görünümün adı.
Görünümde dizin oluşturmak için görünümü ile SCHEMABINDING
tanımlanmalıdır. Herhangi bir kümelenmemiş dizin oluşturulmadan önce görünümde benzersiz bir kümelenmiş dizin oluşturulmalıdır. Dizinli görünümler hakkında daha fazla bilgi için bkz. Açıklamalar.
SQL Server 2016 (13.x) ile başlayarak, nesne kümelenmiş columnstore diziniyle depolanan bir tablo olabilir.
Azure SQL Veritabanı, geçerli veritabanı adı olduğunda <database_name>
veya veya tempdb
<database_name>
<object_name>
ile ##
#
başladığında üç bölümlü ad biçimini <database_name>.<schema_name>.<object_name>
destekler. Şema adı ise dbo
<schema_name>
atlanabilir.
<relational_index_option>::=
Dizini oluştururken kullanılacak seçenekleri belirtir.
PAD_INDEX = { ON | KAPALI }
Dizin doldurmayı belirtir. Varsayılan değer: OFF
.
ÜZERİNDE
Doldurma faktörü tarafından belirtilen boş alan yüzdesi, dizinin ara düzey sayfalarına uygulanır. Aynı anda
PAD_INDEX
ON
belirtilmezseFILLFACTOR
, sys.indexes dosyasındaki doldurma faktörü değeri kullanılır.KAPALI
Ara düzey sayfalar, ara sayfalardaki anahtar kümesi dikkate alınarak, dizinin sahip olabileceği en büyük boyuta sahip en az bir satır için yeterli alan bırakarak yakın kapasiteye doldurulur. Bu durum, olarak ayarlandıysa
ON
ancak dolgu faktörü belirtilmemişsePAD_INDEX
de oluşur.
seçeneği PAD_INDEX
yalnızca belirtildiğinde FILLFACTOR
yararlıdır, çünkü PAD_INDEX
tarafından FILLFACTOR
belirtilen yüzdeyi kullanır. için FILLFACTOR
belirtilen yüzde bir satıra izin verecek kadar büyük değilse, Veritabanı Altyapısı en düşük değere izin vermek için yüzdeyi dahili olarak geçersiz kılar. Ara dizin sayfasındaki satır sayısı, değerinin FILLFACTOR
ne kadar düşük olduğuna bakılmaksızın hiçbir zaman ikiden az olmaz.
Geriye dönük uyumlu söz diziminde, WITH PAD_INDEX
WITH PAD_INDEX = ON
eşdeğerdir.
FILLFACTOR = fillfactor
Veritabanı Altyapısı'nın dizin oluşturma veya yeniden oluşturma sırasında her dizin sayfasının yaprak düzeyini ne kadar tam yapması gerektiğini gösteren bir yüzde belirtir. Fillfactor değeri 1 ile 100 olan bir tamsayı değeri olmalıdır. 0 ve 100 dolgu faktörü değerleri her açıdan aynıdır. fillfactor 100 ise, Veritabanı Altyapısı yaprak sayfaların kapasiteye doldurulduğu dizinler oluşturur.
FILLFACTOR
ayarı yalnızca dizin oluşturulduğunda veya yeniden oluşturulduğunda uygulanır. Veritabanı Altyapısı, sayfalarda belirtilen boş alan yüzdesini dinamik olarak tutmaz.
Dolgu faktörü ayarını görüntülemek için sys.indexes katalog görünümündeki sütunu kullanınfill_factor
.
Önemli
100'den az olan bir FILLFACTOR
dizin oluşturmak, Veritabanı Altyapısı bir dizini oluşturur veya yeniden oluştururken verileri doldurma faktörüne göre yeniden dağıttığından, verilerin kapladığı depolama alanı miktarını artırır.
Daha fazla bilgi için bkz. Dizin için dolgu faktörü belirtme.
SORT_IN_TEMPDB = { ON | KAPALI }
Geçici sıralama sonuçlarının içinde tempdb
depolanıp depolanmayacağını belirtir. Varsayılan değer Azure SQL Veritabanı Hiper Ölçek dışındadır OFF
. Hiper Ölçek'teki tüm dizin derleme işlemleri için, SORT_IN_TEMPDB
devam ettirilebilir bir dizin derlemesi kullanılmadığı sürece her zaman ON
kullanılır. Devam ettirilebilen dizin derlemeleri SORT_IN_TEMPDB
için her zaman OFF
olur.
ÜZERİNDE
Dizini oluşturmak için kullanılan ara sıralama sonuçları içinde
tempdb
depolanır. Bu, 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.KAPALI
Ara sıralama sonuçları dizinle aynı veritabanında depolanır.
Kullanıcı veritabanında dizini oluşturmak için gereken alana ek olarak, tempdb
ara sıralama sonuçlarını tutmak için yaklaşık olarak aynı miktarda ek alana sahip olmalıdır. Daha fazla bilgi için bkz. dizinler için SORT_IN_TEMPDB seçeneği.
Geriye dönük uyumlu söz diziminde, WITH SORT_IN_TEMPDB
WITH SORT_IN_TEMPDB = ON
eşdeğerdir.
IGNORE_DUP_KEY = { ON | KAPALI }
Ekleme işlemi benzersiz bir dizine yinelenen anahtar değerleri eklemeyi denediğinde hata yanıtını belirtir.
IGNORE_DUP_KEY
seçeneği yalnızca dizin oluşturulduktan veya yeniden oluşturulduktan sonra ekleme işlemleri için geçerlidir. SEÇENEĞIn CREATE INDEXOFF
.
ÜZERİNDE
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 eklenmez.
KAPALI
Benzersiz bir dizine yinelenen anahtar değerleri eklendiğinde hata iletisi oluşur. Deyimin tamamı
INSERT
geri alınır.
IGNORE_DUP_KEY
görünümde oluşturulan dizinler, benzersiz olmayan dizinler, XML dizinleri, uzamsal dizinler ve filtrelenmiş dizinler için olarak ayarlanamaz ON
.
Bir dizinin ayarını görüntülemek IGNORE_DUP_KEY
için sys.indexes katalog görünümündeki sütunu kullanınignore_dup_key
.
Geriye dönük uyumlu söz diziminde, WITH IGNORE_DUP_KEY
WITH IGNORE_DUP_KEY = ON
eşdeğerdir.
STATISTICS_NORECOMPUTE = { ON | KAPALI}
İstatistiklerin yeniden derlenip derlenmeyeceğini belirtir. Varsayılan değer: OFF
.
ÜZERİNDE
Güncel olmayan istatistikler otomatik olarak yeniden derlenmez.
KAPALI
Otomatik istatistik güncelleştirme etkinleştirildi.
Otomatik istatistik güncelleştirmesini geri yüklemek için STATISTICS_NORECOMPUTE
KAPALI olarak ayarlayın veya UPDATE STATISTICS
yan tümcesi olmadan NORECOMPUTE
yürütür.
Uyarı
ayarlayarak STATISTICS_NORECOMPUTE = ON
istatistiklerin otomatik olarak yeniden derlenmesini devre dışı bırakırsanız, sorgu iyileştiricisinin tabloyla ilgili sorgular için en uygun yürütme planlarını seçmesini engelleyebilirsiniz.
ayarı STATISTICS_NORECOMPUTE
ON
, dizin yeniden oluşturma işlemi sırasında oluşan dizin istatistiklerinin güncelleştirilmesini engellemez.
Geriye dönük uyumlu söz diziminde, WITH STATISTICS_NORECOMPUTE
WITH STATISTICS_NORECOMPUTE = ON
eşdeğerdir.
STATISTICS_INCREMENTAL = { ON | KAPALI }
Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
olduğunda ON
, oluşturulan istatistikler bölüm istatistiklerine göredir. olduğunda OFF
, istatistik ağacı bırakılır ve SQL Server istatistikleri yeniden hesaplar. Varsayılan değer: OFF
.
Bölüm başına istatistikler desteklenmiyorsa seçenek yoksayılır ve bir uyarı oluşturulur. Artımlı istatistikler aşağıdaki durumlarda desteklenmez:
- Temel tabloyla bölümle hizalanmamış dizinlerle oluşturulan istatistikler.
- Always On okunabilir ikincil veritabanlarında oluşturulan istatistikler.
- Salt okunur veritabanlarında oluşturulan istatistikler.
- Filtrelenmiş dizinlerde oluşturulan istatistikler.
- Görünümlerde oluşturulan istatistikler.
- İç tablolarda oluşturulan istatistikler.
- Uzamsal dizinler veya XML dizinleriyle oluşturulan istatistikler.
DROP_EXISTING = { ON | KAPALI }
Mevcut kümelenmiş veya kümelenmemiş dizini değiştirilmiş sütun belirtimleriyle bırakıp yeniden oluşturma ve dizin için aynı adı koruma seçeneğidir. Varsayılan değer: OFF
.
ÜZERİNDE
index_nameparametresiyle aynı ada sahip olması gereken mevcut dizinin bırakılıp yeniden oluşturulmasını belirtir.
KAPALI
Mevcut dizinin bırakılmaması ve yeniden derlenmemesi için belirtir. Belirtilen dizin adı zaten varsa SQL Server bir hata görüntüler.
DROP_EXISTING
ile şunları değiştirebilirsiniz:
- Kümelenmiş bir rowstore dizinine kümelenmemiş bir satır deposu dizini.
DROP_EXISTING
ile şunları değiştiremezsiniz:
- Kümelenmiş bir satır deposu dizini, kümelenmemiş bir rowstore dizinine.
- Herhangi bir satır deposu dizinine kümelenmiş columnstore dizini.
Geriye dönük uyumlu söz diziminde, WITH DROP_EXISTING
WITH DROP_EXISTING = ON
eşdeğerdir.
ÇEVRİmİÇİ = { ON | KAPALI }
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
.
Önemli
Ç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.
ÜZERİNDE
Uzun süreli tablo kilitleri dizin işlemi boyunca tutulmaz. Dizin işleminin ana aşamasında, kaynak tabloda yalnızca paylaşılan bir amaç (
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
) bir kilit tutulur. İşlemin sonunda, kısa bir süre için, kümelenmemiş bir dizin oluşturulursa nesne üzerinde paylaşılan (S
) bir kilit alınır. Kümelenmiş dizin çevrimiçi oluşturulduğunda veya bırakıldığında ve kümelenmiş veya kümelenmemiş dizin yeniden oluşturulduğunda şema değişikliği (Sch-M
) kilidi alınır.ONLINE
yerel geçici tabloda bir dizin oluşturulurken olarak ayarlanamazON
.Not
Çevrimiçi dizin işlemleri sırasında engellemeyi azaltmak veya önlemek için seçeneğini kullanabilirsiniz
WAIT_AT_LOW_PRIORITY
. Daha fazla bilgi için bkz. çevrimiçi dizin işlemleriyle WAIT_AT_LOW_PRIORITY.KAPALI
Tablo kilitleri dizin işlemi süresi boyunca uygulanır. Kümelenmiş, uzamsal veya XML dizini oluşturan, yeniden derleyen veya düşüren ya da derlenmemiş dizini yeniden oluşturan veya düşüren çevrimdışı dizin işlemi, tabloda şema değişikliği (
Sch-M
) kilidi alır. Bu, işlem süresi boyunca temel alınan tabloya tüm kullanıcı erişimini engeller. Kümelenmemiş dizin oluşturan çevrimdışı dizin işlemi başlangıçta tabloda paylaşılan (S
) bir kilit alır. Bu, temel tablo tanımının değiştirilmesini engeller, ancak dizin derlemesi devam ederken tablodaki verilerin okunmasına ve değiştirilmesine izin verir.
Daha fazla bilgi için bkz. Çevrimiçi dizin işlemleri gerçekleştirme ve Çevrimiçi dizin işlemleri için yönergeler.
Aşağıdaki durumlar dışında, genel geçici tablolardaki dizinler de dahil olmak üzere dizinler çevrimiçi oluşturulabilir:
- XML dizini
- Yerel geçici tablodaki dizin
- Görünümde ilk benzersiz kümelenmiş dizin
- Devre dışı bırakılmış kümelenmiş dizinler
- SQL Server 2017 (14.x)) ve eski sürümlerde kümelenmiş columnstore dizinleri
- SQL Server 2016 (13.x)) ve eski sürümlerde kümelenmemiş columnstore dizinleri
- Kümelenmiş dizin, temel alınan tabloda LOB veri türleri (görüntü, ntext, metin) ve uzamsal veri türleri varsa
-
varchar(max) ve varbinary(max) sütunları dizin anahtarının parçası olamaz. SQL Server'da (SQL Server 2012 (11.x) ile başlayarak), Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde bir tablo varchar(max) veya varbinary(max) sütunları içerdiğinde, diğer sütunları içeren kümelenmiş dizin oluşturulabilir veya seçeneği kullanılarak
ONLINE
yeniden oluşturulabilir. - Kümelenmiş columnstore dizini olan bir tablodaki kümelenmemiş dizinler
Daha fazla bilgi için bkz. Çevrimiçi dizin işlemleri nasıl çalışır?
RESUMABLE = { ON | KAPALI }
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Çevrimiçi dizin işleminin devam ettirilebilir olup olmadığını belirtir. Daha fazla bilgi için bkz. Yeniden devam ettirilebilen dizin işlemleri ve Devam ettirilebilen dizin konuları.
ÜZERİNDE
Dizin işlemi devam ettirilebilir.
KAPALI
Dizin işlemi devam ettirilemez.
MAX_DURATION = ile kullanılan RESUMABLE = ON
[DAKİkA] (ONLINE = ON
gerektirir)
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Duraklatılmadan önce devam ettirilebilen dizin işleminin ne kadar süreyle yürütülür, dakika cinsinden belirtir.
ALLOW_ROW_LOCKS = { ON | KAPALI }
Satır kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan değer: ON
.
ÜZERİNDE
Dizine erişirken satır kilitlerine izin verilir. Veritabanı Altyapısı satır kilitlerinin ne zaman kullanılacağını belirler.
KAPALI
Satır kilitleri kullanılmaz.
ALLOW_PAGE_LOCKS = { ON | KAPALI }
Sayfa kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan değer: ON
.
ÜZERİNDE
Dizine erişirken sayfa kilitlerine izin verilir. Veritabanı Altyapısı, sayfa kilitlerinin ne zaman kullanılacağını belirler.
KAPALI
Sayfa kilitleri kullanılmaz.
OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | KAPALI }
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Son sayfa ekleme çekişmesi önlemek için iyileştirilip iyileştirilmeyeceğini belirtir. Varsayılan değer: OFF
. Daha fazla bilgi için Sıralı anahtarlar bölümüne bakın.
MAXDOP = max_degree_of_parallelism
Dizin işlemi için 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. Bir dizin derleme işlemi için paralellik derecesini ve sonuçta elde edilen kaynak tüketimini sınırlamak için kullanın MAXDOP
.
max_degree_of_parallelism olabilir:
1
Paralel plan oluşturmayı bastırır.
>1
Paralel dizin işleminde kullanılan en yüksek paralellik derecesini, geçerli sistem iş yüküne göre belirtilen sayıyla veya daha az değerle kısıtlar.
0 (varsayılan)
Geçerli sistem iş yüküne göre azaltılmadığı sürece sunucu, veritabanı veya iş yükü grubu düzeyinde belirtilen paralellik derecesini kullanır.
Daha fazla bilgi için bkz . Paralel dizin işlemlerini yapılandırma.
Not
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
Belirtilen dizin, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:
Hiç kimse
Dizin veya belirtilen bölümler sıkıştırılamaz. Bu, columnstore dizinleri için geçerli değildir.
SIRA
Dizin veya belirtilen bölümler satır sıkıştırma kullanılarak sıkıştırılır. Bu, columnstore dizinleri için geçerli değildir.
SAYFA
Dizin veya belirtilen bölümler sayfa sıkıştırma kullanılarak sıkıştırılır. Bu, columnstore dizinleri için geçerli değildir.
COLUMNSTORE
Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Hem kümelenmemiş columnstore hem de kümelenmiş columnstore dizinleri dahil olmak üzere yalnızca columnstore dizinleri için geçerlidir.
COLUMNSTORE_ARCHIVE
Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Hem kümelenmemiş columnstore hem de kümelenmiş columnstore dizinleri dahil olmak üzere yalnızca columnstore dizinleri 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 küçük bir depolama boyutu gerektiren ve depolama ve alma için daha fazla zaman ayırabilen diğer durumlar için kullanılabilir.
Sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
XML_COMPRESSION
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Belirtilen dizin için bir veya daha fazla xml veri türü sütunu içeren XML sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:
ÜZERİNDE
Dizin veya belirtilen bölümler XML sıkıştırması kullanılarak sıkıştırılır.
KAPALI
Dizin veya belirtilen bölümler XML sıkıştırması kullanılarak sıkıştırılmaz.
ON PARTITIONS ( { <partition_number_expression> | <aralığı> } [ ,...n ] )
DATA_COMPRESSION
veya XML_COMPRESSION
ayarlarının uygulandığı bölümleri belirtir. Dizin bölümlenmemişse, ON PARTITIONS
bağımsız değişken bir hata oluşturur.
ON PARTITIONS
yan tümcesi sağlanmamışsa, DATA_COMPRESSION
veya XML_COMPRESSION
seçeneği bölümlenmiş dizinin tüm bölümlerine uygulanır.
<partition_number_expression>
aşağıdaki yollarla belirtilebilir:
- Bölümün numarasını belirtin, ö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>
, anahtar sözcüğüyle TO
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:
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)
);
XML_COMPRESSION
seçeneğini birden çok kez de belirtebilirsiniz, örneğin:
REBUILD WITH
(
XML_COMPRESSION = OFF ON PARTITIONS (1),
XML_COMPRESSION = ON ON PARTITIONS (2, 4, 6 TO 8),
XML_COMPRESSION = OFF ON PARTITIONS (3, 5)
);
Açıklamalar
Deyimi için CREATE INDEX
sorgu planını oluştururken, sorgu iyileştiricisi tablo taraması yapmak yerine başka bir dizini taramayı seçebilir. Sıralama işlemi bazı durumlarda ortadan kaldırılabilir. Çok işlemcili bilgisayarlarda, CREATE INDEX
diğer sorgularla aynı şekilde, dizini oluşturmayla ilişkili tarama ve sıralama işlemleri için paralellik kullanabilir. Daha fazla bilgi için bkz . Paralel dizin işlemlerini yapılandırma.
CREATE INDEX
Veritabanı kurtarma modeli toplu olarak günlüğe kaydedilmiş veya basit olarak ayarlanmışsa işlem minimum düzeyde günlüğe kaydedilebilir.
Dizinler geçici bir tabloda oluşturulabilir. Tablo bırakıldığında veya kapsam dışına çıktığında dizinler bırakılır.
Birincil anahtar kısıtlaması eklendiğinde kümelenmiş dizin bir tablo değişkeni üzerinde oluşturulur. Benzer şekilde, benzersiz bir kısıtlama eklendiğinde bir tablo değişkeni üzerinde derlenmemiş dizin oluşturulur. Tablo değişkeni kapsam dışına çıktığında dizinler bırakılır.
Dizinler genişletilmiş özellikleri destekler.
CREATE INDEX
Microsoft Fabric'te desteklenmez.
Kümelenmiş
Tablo (yığın) üzerinde kümelenmiş dizin oluşturma veya mevcut kümelenmiş dizini bırakma ve yeniden oluşturma, veri sıralamasını ve özgün tablonun veya mevcut kümelenmiş dizin verilerinin geçici bir kopyasını barındırmak için veritabanında ek çalışma alanının kullanılabilir olmasını gerektirir. Kümelenmiş dizinler hakkında daha fazla bilgi için bkz. Kümelenmiş dizinler oluşturma ve SQL Server dizin mimarisi ve tasarım kılavuzu.
Kümelenmemiş dizinler
SQL Server 2016'dan (13.x) başlayarak, Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde kümelenmiş columnstore dizini olarak depolanan bir tabloda kümelenmemiş dizin oluşturabilirsiniz. Önce yığın veya kümelenmiş dizin olarak depolanan bir tabloda kümelenmemiş dizin oluşturursanız, tabloyu daha sonra kümelenmiş columnstore dizinine dönüştürürseniz dizin devam eder. Kümelenmiş columnstore dizinini yeniden oluştururken, kümelenmemiş dizini bırakmanız da gerekmez.
kümelenmiş columnstore dizini olarak depolanan bir tabloda kümelenmemiş dizin oluşturduğunuzda FILESTREAM_ON
seçeneği geçerli değildir.
Benzersiz dizinler
Benzersiz bir dizin mevcut olduğunda, Veritabanı Altyapısı her veri eklendiğinde veya değiştirildiğinde yinelenen değerleri denetler. Yinelenen anahtar değerleri oluşturacak işlemler geri alınır ve Veritabanı Altyapısı bir hata iletisi döndürür. Veri ekleme veya değiştirme işlemi birçok satırı değiştirse ancak yalnızca bir yinelemeye neden olsa bile bu durum geçerlidir. seçeneği olarak ayarlanmış ON
benzersiz bir dizin IGNORE_DUP_KEY
olduğunda satır ekleme girişiminde bulunulduğunda, benzersiz dizini ihlal eden satırlar yoksayılır.
Bölümlenmiş dizinler
Bölümlenmiş dizinler bölümlenmiş tablolara benzer şekilde oluşturulur ve korunur, ancak sıradan dizinler gibi ayrı veritabanı nesneleri olarak işlenir. Bölümlenmemiş bir tabloda bölümlenmiş dizininiz olabilir ve bölümlenmiş bir tabloda bölümlenmemiş bir dizininiz olabilir.
Bölümlenmiş bir tabloda dizin oluşturuyorsanız ve dizinin yerleştirildiği bir dosya grubu belirtmezseniz, dizin temel tabloyla aynı şekilde bölümlenir. Bunun nedeni dizinlerin varsayılan olarak temel tablolarıyla aynı dosya gruplarına ve aynı bölümleme sütunlarını kullanan bölümlenmiş bir tabloya yerleştirilmesidir. Dizin, tabloyla aynı bölümleme düzenini ve bölümleme sütununu kullandığında, dizin tabloyla hizalanır.
Uyarı
1.000'den fazla bölümü olan bir tabloda hizalanmamış dizinler oluşturmak ve yeniden oluşturmak mümkündür, ancak desteklenmez. Bunun yapılması, bu işlemler sırasında performansın düşmesine veya aşırı bellek tüketimine neden olabilir. Yalnızca bölüm sayısı 1.000'i aştığında hizalanmış dizinler kullanmanızı öneririz.
Benzersiz olmayan, kümelenmiş bir dizini bölümlerken, Veritabanı Altyapısı varsayılan olarak kümelenmiş dizin anahtarları listesine önceden belirtilmemişse tüm bölümleme sütunlarını ekler.
Dizinli görünümler, bölümlenmiş tablolarda, tablolardaki dizinler gibi oluşturulabilir. Bölümlenmiş dizinler hakkında daha fazla bilgi için bkz . Bölümlenmiş tablolar ve dizinler ile SQL Server dizin mimarisi ve tasarım kılavuzu.
Bir dizin oluşturulduğunda veya yeniden oluşturulduğunda, sorgu dizindeki güncelleştirme istatistiklerini iyileştirir. Bölümlenmiş dizin için sorgu iyileştiricisi tablodaki tüm satırları bölümlenmemiş dizin için taramak yerine varsayılan örnekleme algoritmasını kullanır. Tablodaki tüm satırları tarayarak bölümlenmiş dizinlerle ilgili istatistikleri almak için CREATE STATISTICS
yan tümcesiyle UPDATE STATISTICS
veya FULLSCAN
kullanın.
Filtrelenmiş dizinler
Filtrelenmiş dizin, tablodaki satırların küçük bir yüzdesini seçen sorgular için uygun, iyileştirilmiş bir kümelenmemiş dizindir. Tablodaki verilerin bir kısmını dizine almak için bir filtre koşulu kullanır. İyi tasarlanmış bir filtrelenmiş dizin sorgu performansını artırabilir, depolama maliyetlerini azaltabilir ve bakım maliyetlerini azaltabilir.
Filtrelenmiş dizinler için gerekli SET seçenekleri
SET
Aşağıdaki koşullardan herhangi biri gerçekleştiğinde Gerekli değer sütunundaki seçenekler gereklidir:
Filtrelenmiş bir dizin oluşturursunuz.
,
INSERT
UPDATE
,DELETE
veyaMERGE
deyimi filtrelenmiş dizindeki verileri değiştirir.Filtrelenmiş dizin, sorgu planını oluşturmak için sorgu iyileştiricisi tarafından kullanılır.
SET
seçenekGerekli değer Varsayılan sunucu değeri Varsayılan OLE DB ve ODBC değeri Varsayılan DB-Library değeri ANSI_NULLS
ON
ON
ON
OFF
ANSI_PADDING
ON
ON
ON
OFF
ANSI_WARNINGS
1ON
ON
ON
OFF
ARITHABORT
ON
ON
OFF
OFF
CONCAT_NULL_YIELDS_NULL
ON
ON
ON
OFF
NUMERIC_ROUNDABORT
OFF
OFF
OFF
OFF
QUOTED_IDENTIFIER
ON
ON
ON
OFF
1 Veritabanı
ANSI_WARNINGS
ON
uyumluluk düzeyi 90 veya daha yüksek olduğunda örtük olarakARITHABORT
ON
olarak ayarlanacağı ayar. Veritabanı uyumluluk düzeyi 80 veya daha eski olarak ayarlandıysa,ARITHABORT
seçeneği açıkça olarakON
olarak ayarlanmalıdır.
SET
Seçenekler yanlışsa aşağıdaki koşullar oluşabilir:
- Filtrelenmiş dizin oluşturulamıyor.
- Veritabanı Altyapısı bir hata oluşturur ve dizindeki
INSERT
verileri değiştiren ,UPDATE
,DELETE
veyaMERGE
deyimini geri alır. - Sorgu iyileştiricisi, Transact-SQL deyimleri için yürütme planındaki dizini dikkate almaz.
Filtrelenmiş dizinler hakkında daha fazla bilgi için bkz. Filtrelenmiş dizinler oluşturma ve SQL Server dizin mimarisi ve tasarım kılavuzu.
Uzamsal dizinler
Uzamsal dizinler hakkında bilgi için bkz . CREATE SPATIAL INDEX ve Spatial indexes overview.
XML dizinleri
XML dizinleri hakkında bilgi için bkz. CREATE XML INDEX ve
Dizin anahtarı boyutu
Bir dizin anahtarının en büyük boyutu kümelenmiş dizin için 900 bayt ve kümelenmemiş dizin için 1.700 bayttır. (SQL Veritabanı ve SQL Server 2016 (13.x) öncesinde sınır her zaman 900 bayttı.)
Varchar sütunlarında bayt sınırını aşan dizinler, dizin oluşturulurken sütunlardaki mevcut veriler sınırı aşmazsa oluşturulabilir; ancak, sütunlarda toplam boyutun sınırdan büyük olmasına neden olan sonraki ekleme veya güncelleştirme işlemleri başarısız olur. Kümelenmiş dizinin dizin anahtarı, ayırma biriminde var olan veriler ROW_OVERFLOW_DATA
içeren varchar sütunları içeremez.
Bir varchar sütununda kümelenmiş dizin oluşturulursa ve mevcut veriler ayırma birimindeyseIN_ROW_DATA
, verileri satır dışına gönderebilecek sonraki ekleme veya güncelleştirme işlemleri başarısız olur.
Kümelenmemiş dizinler, dizinin yaprak düzeyinde anahtar olmayan (dahil) sütunlar içerebilir. Dizin anahtarı boyutu hesaplanırken bu sütunlar Veritabanı Altyapısı tarafından dikkate alınmaz. Daha fazla bilgi için bkz. Eklenen sütunlarla dizin oluşturma ve SQL Server dizin mimarisi ve tasarım kılavuzu.
Not
Tablolar bölümlendiğinde, bölümleme anahtarı sütunları benzersiz olmayan bir kümelenmiş dizinde mevcut değilse, Veritabanı Altyapısı tarafından dizine eklenir. Dizine alınan sütunların birleşik boyutu (dahil edilen sütunları saymama), artı olarak eklenen bölümleme sütunları benzersiz olmayan bir kümelenmiş dizinde 1800 baytı aşamaz.
Hesaplanan sütunlar
Dizinler hesaplanan sütunlarda oluşturulabilir. Ayrıca, hesaplanan sütunlar özelliğine PERSISTED
sahip olabilir. Bu, Veritabanı Altyapısı'nın hesaplanan değerleri tabloda depoladığı ve hesaplanan sütunun bağımlı olduğu diğer sütunlar güncelleştirildiğinde bunları güncelleştirdiği anlamına gelir. Veritabanı Altyapısı, sütunda dizin oluştururken ve bir sorguda dizine başvurulduğunda bu kalıcı değerleri kullanır.
Hesaplanan sütunu dizine almak için hesaplanan sütunun belirleyici ve kesin olması gerekir. Ancak özelliğinin PERSISTED
kullanılması, dizine alınabilen hesaplanan sütunların türünü şunları içerecek şekilde genişletir:
- Transact-SQL ve CLR işlevlerine ve kullanıcı tarafından belirlenici olarak işaretlenen CLR kullanıcı tanımlı tür yöntemlerine göre hesaplanan sütunlar.
- Veritabanı Altyapısı tarafından tanımlanan ancak kesin olmayan ifadeleri temel alan hesaplanan sütunlar.
Kalıcı hesaplanan sütunlar, filtrelenmiş dizinler için gerekli SET seçenekleri bölümünde gösterildiği gibi aşağıdaki SET
seçeneklerin ayarlanmasını gerektirir.
veya PRIMARY KEY
kısıtlamasıUNIQUE
, dizin oluşturma için tüm koşulları karşıladıkça hesaplanan bir sütun içerebilir. Özellikle, hesaplanan sütun belirleyici, kesin veya belirleyici olmalı ve kalıcı olmalıdır. Determinizm hakkında daha fazla bilgi için bkz. Deterministic ve Nondeterministic Functions.
görüntütüretilen hesaplanan sütunlar ntext, metin, varchar(max), nvarchar(max), varbinary(max)ve xml veri türleri, hesaplanan sütun veri türü bir dizin anahtarı sütunu veya anahtar olmayan sütun olarak izin verebildiği sürece anahtar olarak dizine eklenebilir veya anahtar olmayan sütun olarak eklenebilir. Örneğin, hesaplanan xml sütununda birincil XML dizini oluşturamazsınız. Dizin anahtarı boyutu 900 baytı aşarsa bir uyarı iletisi görüntülenir.
Hesaplanan sütunda dizin oluşturmak, daha önce çalışan bir ekleme veya güncelleştirme işleminin başarısız olmasına neden olabilir. Hesaplanan sütun aritmetik bir hatayla sonuçlandığında böyle bir hata oluşabilir.
Örneğin, aşağıdaki tabloda hesaplanan sütunun c
ifadesi satır eklendiğinde aritmetik bir hatayla sonuçlanmış gibi görünse de deyimi INSERT
çalışır.
CREATE TABLE t1 (a INT, b INT, c AS a/b);
INSERT INTO t1 VALUES (1, 0);
Ancak hesaplanan sütunda c
bir dizin oluşturursanız, aynı INSERT
deyim başarısız olur.
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ütunlardaki dizinler.
Dizinlere eklenen sütunlar
Dahil edilen sütunlar olarak adlandırılan anahtar olmayan sütunlar, sorguyu kapsayan sorgu performansını geliştirmek için kümelenmemiş dizinin yaprak düzeyine eklenebilir. Diğer bir ifadeyle, sorguda başvurulan tüm sütunlar anahtar veya anahtar olmayan sütunlar olarak dizine eklenir. Bu, sorgu iyileştiricinin kümelenmemiş dizin taramasından veya aramasından gerekli tüm bilgileri almasını sağlar; tabloya veya kümelenmiş dizin verilerine erişilir. Daha fazla bilgi için bkz. Eklenen sütunlarla dizin oluşturma ve SQL Server dizin mimarisi ve tasarım kılavuzu.
Dizin seçeneklerini belirtme
SQL Server 2005 (9.x) yeni dizin seçeneklerini kullanıma sunar ve ayrıca seçeneklerin belirtilma şeklini değiştirir. Geriye dönük uyumlu söz diziminde, WITH option_name
ile WITH (option_name = ON)
eşdeğerdir. Dizin seçeneklerini ayarladığınızda aşağıdaki kurallar uygulanır:
- Yeni dizin seçenekleri yalnızca
WITH (<option_name> = <ON | OFF>)
kullanılarak belirtilebilir. - Seçenekler, aynı deyimde hem geriye dönük uyumlu hem de yeni söz dizimi kullanılarak belirtilemiyor. Örneğin,
WITH (DROP_EXISTING, ONLINE = ON)
belirtilmesi deyiminin başarısız olmasına neden olur. - XML dizini oluşturduğunuzda, seçenekler
WITH (<option_name> = <ON | OFF>)
kullanılarak belirtilmelidir.
DROP_EXISTING yan tümcesi
dizini yeniden oluşturmak, sütunları eklemek veya bırakmak, seçenekleri değiştirmek, sütun sıralama düzenini değiştirmek veya bölüm düzenini veya dosya grubunu değiştirmek için DROP_EXISTING
yan tümcesini kullanabilirsiniz.
Dizin bir PRIMARY KEY
veya UNIQUE
kısıtlaması uygularsa ve dizin tanımı herhangi bir şekilde değiştirilmezse, dizin bırakılır ve mevcut kısıtlama korunarak yeniden oluşturulur. Ancak, dizin tanımı değiştirilirse deyimi başarısız olur. Veya UNIQUE
kısıtlamasının PRIMARY KEY
tanımını değiştirmek için kısıtlamayı bırakın ve yeni tanım ile bir kısıtlama ekleyin.
DROP_EXISTING
, aynı veya farklı anahtar kümesiyle kümelenmiş dizini, aynı zamanda kümelenmemiş dizinleri olan bir tabloda yeniden oluşturduğunuzda performansı artırır.
DROP_EXISTING
, eski kümelenmiş dizinde bir DROP INDEX
deyiminin yürütülmesini ve ardından yeni kümelenmiş dizin için bir CREATE INDEX
deyiminin yürütülmesini değiştirir. Kümelenmemiş dizinler bir kez yeniden oluşturulur ve yalnızca dizin tanımı değiştiyse. dizin tanımı özgün dizinle aynı dizin adı, anahtar ve bölüm sütunları, benzersizlik özniteliği ve sıralama düzenine sahip olduğunda, DROP_EXISTING
yan tümcesi kümelenmemiş dizinleri yeniden oluşturmaz.
Toplanmamış dizinler yeniden derlenmiş olsun veya olmasın, her zaman özgün dosya gruplarında veya bölüm şemalarında kalır ve özgün bölüm işlevlerini kullanır. Kümelenmiş dizin farklı bir dosya grubuna veya bölüm düzenine yeniden oluşturulursa, kümelenmemiş dizinler kümelenmiş dizinin yeni konumuna denk gelecek şekilde taşınmaz. Bu nedenle, daha önce kümelenmiş dizinle hizalanmış kümelenmemiş dizinler bile artık kümelenmiş dizinle hizalanamayabilir. Bölümlenmiş dizin hizalaması hakkında daha fazla bilgi için bkz . Bölümlenmiş tablolar ve dizinler.
Yan DROP_EXISTING
tümcesi, dizin deyimi bir kümelenmemiş dizin belirtmediği ve seçeneği olarak ayarlanmadığı OFF
sürece, aynı dizin anahtarı sütunları aynı sırada ve ONLINE
aynı artan veya azalan düzende kullanılıyorsa verileri yeniden sıralamaz. Kümelenmiş dizin devre dışı bırakılırsa, CREATE INDEX WITH DROP_EXISTING
işlemi olarak ayarlanmış OFF
olarak ONLINE
gerçekleştirilmelidir. Kümelenmemiş bir dizin devre dışıysa ve devre dışı bırakılmış bir kümelenmiş dizinle ilişkilendirilmemişse, CREATE INDEX WITH DROP_EXISTING
işlem veya ON
olarak ayarlanmış OFF
olarak ONLINE
gerçekleştirilebilir.
Not
128 veya daha fazla uzantıya sahip dizinler bırakıldığında veya yeniden oluşturulduğunda, Veritabanı Altyapısı işlem işlemeden sonraya kadar gerçek sayfa ayırmalarını ve ilişkili kilitlerini geçersiz kılır. Daha fazla bilgi için bkz. Ertelenen serbest bırakma.
ÇEVRİmİÇİ seçeneği
Dizin işlemlerini çevrimiçi gerçekleştirmek için aşağıdaki yönergeler geçerlidir:
- Temel alınan tablo, çevrimiçi dizin işlemi devam ederken değiştirilemez, kırpılamaz veya bırakılamaz.
- Dizin işlemi sırasında ek geçici disk alanı gerekir.
- Çevrimiçi işlemler, kalıcı hesaplanan sütunlar veya dahil edilen sütunlar içeren bölümlenmiş dizinler ve dizinler üzerinde gerçekleştirilebilir.
-
WAIT_AT_LOW_PRIORITY
Bağımsız değişken seçeneği, dizin işleminin kilitSch-M
beklediğinde nasıl ilerleyeceğine karar vermenizi sağlar. Daha fazla bilgi için bkz. WAIT_AT_LOW_PRIORITY
Daha fazla bilgi için bkz. Dizin işlemlerini çevrimiçigerçekleştirme.
Devam ettirilebilen dizin işlemleri
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
Çevrimiçi dizin oluşturma işleminin devam ettirilebilir olmasını sağlayabilirsiniz. Bu, dizin derlemesinin durdurulabileceği ve daha sonra durdurulduğu noktadan yeniden başlatılabildiği anlamına gelir. Dizin derlemesini devam ettirilebilir olarak çalıştırmak için seçeneğini belirtin RESUMABLE = ON
.
Devam ettirilebilen dizin işlemleri için aşağıdaki yönergeler geçerlidir:
- Seçeneği kullanmak
RESUMABLE
için seçeneğini de kullanmanızONLINE
gerekir. - Bu
RESUMABLE
seçenek, belirli bir dizinin meta verilerinde kalıcı değildir ve yalnızca geçerli DDL deyiminin süresine uygulanır. Bu nedenle,RESUMABLE = ON
yan tümcesi, sürdürülebilirliği etkinleştirmek için açıkça belirtilmelidir. - seçeneği
MAX_DURATION
iki bağlamda belirtilebilir:-
MAX_DURATION
seçeneği,RESUMABLE
yeniden derlenen bir dizinin zaman aralığını belirtir. Bu süre geçtikten sonra ve dizin yeniden derlemesi hala çalışıyorsa duraklatılır. Duraklatılmış dizin için yeniden oluşturma işleminin ne zaman sürdürülebileceğine siz karar verirsiniz. dakikaMAX_DURATION
cinsinden süre 0 dakikadan uzun ve bir haftadan küçük veya buna eşit olmalıdır (7 * 24 * 60 = 10080 dakika). Dizin işlemindeki uzun bir duraklama, hem özgün dizin hem de yeni oluşturulan dizin için disk alanı gerektiğinden ve DML işlemleri tarafından güncelleştirildiğinden, belirli bir tablodaki DML performansını ve veritabanı disk kapasitesini önemli ölçüde etkileyebilir. Seçenek belirtilmezseMAX_DURATION
, dizin işlemi tamamlanmadan veya hata oluşana kadar devam eder. -
MAX_DURATION
WAIT_AT_LOW_PRIORITY
seçeneği, eylem gerçekleştirmeden önce dizin işlemi engellenirse düşük öncelikli kilitler kullanılarak beklenecek süreyi belirtir. Daha fazla bilgi için bkz. çevrimiçi dizin işlemleriyle WAIT_AT_LOW_PRIORITY.
-
- Dizin işlemini hemen duraklatmak için komutunu yürütebilir
ALTER INDEX PAUSE
veya komutunu yürütebilirsinizKILL <session_id>
. - Özgün
CREATE INDEX
deyimi aynı parametrelerle yeniden yürütmek, duraklatılmış dizin derleme işlemini sürdürür. Deyimini yürüterekALTER INDEX RESUME
duraklatılmış dizin derleme işlemini de sürdürebilirsiniz. - komutu,
ABORT
bir dizin derlemesi çalıştıran oturumu öldürür ve dizin işlemini iptal eder. Durdurulmuş bir dizin işlemini sürdüremezsiniz.
Devam ettirilebilen dizin işlemi tamamlanana, duraklatana veya başarısız olana kadar çalışır. İşlemin duraklatılması durumunda, işlemin duraklatıldığını ve dizin oluşturma işleminin tamamlanmadığını belirten bir hata verilir. İşlemin başarısız olması durumunda da bir hata verilir.
Dizin işleminin devam ettirilebilir bir işlem olarak yürütülip yürütülmediğini görmek ve geçerli yürütme durumunu denetlemek için sys.index_resumable_operations katalog görünümünü kullanın.
Kaynaklar
Devam ettirilebilen dizin işlemleri için aşağıdaki kaynaklar gereklidir:
- Derlemenin duraklatıldığı zaman da dahil olmak üzere dizinin derlenmesini sağlamak için gereken ek alan.
- Sıralama aşamasında ek günlük aktarım hızı. Devam ettirilebilen dizin için genel günlük alanı kullanımı, normal çevrimiçi dizin oluşturma işlemiyle karşılaştırıldığında daha azdır ve bu işlem sırasında günlük kesilmesine izin verir.
- Dizin işlemi duraklatılırken oluşturulan dizinle ilişkili tabloyu değiştirmeye çalışan DDL deyimlerine izin verilmez.
- Hayalet temizleme, hem duraklatılırken hem de işlem çalışırken işlem süresi boyunca derleme içi dizinde engellenir.
- Tabloda LOB sütunları varsa, devam ettirilebilen kümelenmiş dizin derlemesi, işlemin başlangıcında şema değişikliği (
Sch-M
) kilidi gerektirir.
Geçerli işlevsel sınırlamalar
Devam ettirilebilen dizin oluşturma işlemleri aşağıdaki sınırlamalara sahiptir:
- Devam ettirilebilen çevrimiçi dizin oluşturma işlemi duraklatıldıktan sonra ilk değeri
MAXDOP
değiştirilemez. - Bu
SORT_IN_TEMPDB = ON
seçenek, devam ettirilebilen dizin işlemleri için desteklenmez. - ile
RESUMABLE = ON
DDL komutu, açık bir işlem içinde yürütülemez. - Aşağıdakiler içeren bir devam ettirilebilir dizin oluşturamazsınız:
- Anahtar sütun olarak hesaplanan veya
timestamp
(rowversion
) sütunlar. - LoB sütununu dahil edilen sütun olarak belirleyin.
- Anahtar sütun olarak hesaplanan veya
- Devam ettirilebilen dizin işlemleri şu işlemler için desteklenmez:
-
ALTER INDEX REBUILD ALL
komutu -
ALTER TABLE REBUILD
komutu - Columnstore dizinleri
- Filtrelenmiş dizinler
- Devre dışı bırakılmış dizinler
-
Çevrimiçi dizin işlemleriyle WAIT_AT_LOW_PRIORITY
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
seçeneğini kullanmadığınızda, dizin oluşturma işleminin WAIT_AT_LOW_PRIORITY
başlaması ve tamamlanması için tablo veya dizinde kilitleri tutan tüm etkin engelleme işlemlerinin tamamlanması gerekir. Çevrimiçi dizin işlemi başladığında ve tamamlanmadan önce, tabloda paylaşılan (S
) veya şema değişikliği (Sch-M
) kilidi alması ve bunu kısa bir süre boyunca tutması gerekir. Kilit yalnızca kısa bir süre tutulsa da iş yükü aktarım hızını önemli ölçüde etkileyebilir, sorgu gecikme süresini artırabilir veya yürütme zaman aşımlarına neden olabilir.
Bu sorunları önlemek için seçeneği, WAIT_AT_LOW_PRIORITY
çevrimiçi dizin işleminin S
başlatılıp tamamlanması için gereken veya Sch-M
kilitlerin davranışını yönetmenize olanak tanır ve üç seçenekten birini belirleyebilirsiniz. Her durumda, tarafından MAX_DURATION = n [minutes]
belirtilen bekleme süresi boyunca dizin işlemini içeren bir engelleme yoksa, dizin işlemi hemen devam eder.
WAIT_AT_LOW_PRIORITY
çevrimiçi dizin işlemini düşük öncelikli kilitler kullanarak bekleterek normal öncelik kilitlerini kullanan diğer işlemlerin bu arada 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
=
time [MINUTES
]
Çevrimiçi dizin işleminin düşük öncelikli kilitler kullanarak beklediği bekleme süresi (dakika cinsinden belirtilen tamsayı değeri). İşlem bu süre boyunca MAX_DURATION
engellenirse, belirtilen ABORT_AFTER_WAIT
eylem yürütülür.
MAX_DURATION
zaman her zaman dakika cinsindendir ve sözcük MINUTES
atlanabilir.
ABORT_AFTER_WAIT
= [NONE
| | SELF
BLOCKERS
]
-
NONE
: Normal öncelikli kilidi beklemeye devam edin. -
SELF
: Hiçbir işlem yapmadan yürütülmekte olan çevrimiçi dizin işleminden çıkın. SeçenekSELF
0 olduğundaMAX_DURATION
kullanılamaz. -
BLOCKERS
: İşlemin devam edebilmesi için çevrimiçi dizin işlemini engelleyen tüm kullanıcı işlemlerini kapatın.BLOCKERS
seçeneği, veyaALTER INDEX
deyimini yürüten sorumlununCREATE INDEX
izne sahipALTER ANY CONNECTION
olmasını gerektirir.
Düşük öncelikli kilitleri bekleyen dizin işlemlerini izlemek için aşağıdaki genişletilmiş olayları kullanabilirsiniz:
lock_request_priority_state
process_killed_by_abort_blockers
ddl_with_wait_at_low_priority
Satır ve sayfa kilitleme seçenekleri
ALLOW_ROW_LOCKS = ON
ve ALLOW_PAGE_LOCK = ON
dizine erişirken satır, sayfa ve tablo düzeyinde kilitlere izin verilir. Veritabanı Altyapısı uygun kilidi seçer ve kilidi bir satırdan veya sayfa kilidinden tablo kilidine yükseltebilir.
ALLOW_ROW_LOCKS = OFF
ve ALLOW_PAGE_LOCK = OFF
, dizine erişirken yalnızca tablo düzeyinde bir kilide izin verilir.
Uyarı
Dizinde satır veya sayfa kilitlerinin devre dışı bırakılması önerilmez. Eşzamanlılık ile ilgili sorunlar oluşabilir ve belirli işlevler kullanılamayabilir. Örneğin, bir dizin olarak ayarlandığında OFF
yeniden düzenlenemezALLOW_PAGE_LOCKS
.
Sıralı anahtarlar
Şunlar için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümleri, Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde.
Son sayfa ekleme çekişmesi, çok sayıda eşzamanlı iş parçacığı sıralı anahtarla dizine satır eklemeye çalıştığında oluşan yaygın bir performans sorunudur. Öndeki anahtar sütunu, kimlik sütunu veya varsayılan olarak geçerli tarih/saat olan bir tarih gibi her zaman artan (veya azalan) değerler içerdiğinde dizin sıralı olarak kabul edilir. Eklenen anahtarlar sıralı olduğundan, tüm yeni satırlar dizin yapısının sonuna ( başka bir deyişle, aynı sayfaya) eklenir. Bu, bellekte sayfa için çekişmeye yol açar ve söz konusu sayfa için bir mandal elde etmek için bekleyen birkaç iş parçacığı olarak gözlemlenebilir. Karşılık gelen bekleme türü şeklindedir PAGELATCH_EX
.
OPTIMIZE_FOR_SEQUENTIAL_KEY
dizin seçeneğinin etkinleştirilmesi, veritabanı altyapısında dizine yüksek eşzamanlılık eklemeleri için aktarım hızını iyileştirmeye yardımcı olan bir iyileştirme sağlar. Sıralı anahtara sahip olan ve bu nedenle son sayfa ekleme çekişmesi eğilimli dizinlere yöneliktir, ancak B-Tree dizin yapısının diğer alanlarında etkin noktalara sahip dizinlerde de yardımcı olabilir.
Not
Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, bellek için iyileştirilmiş tablolardaki columnstore dizinleri veya dizinleri için geçerli değildir. Daha fazla bilgi için
Veri sıkıştırma
Veri sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
Veri sıkıştırma kullanıldığında dizin derleme işlemleri bağlamında dikkate alınacak önemli noktalar şunlardır:
- Sıkıştırma, sayfada daha fazla satırın depolanmasına izin verebilir, ancak en büyük satır boyutunu değiştirmez.
- Bir dizinin yaprak olmayan sayfaları sayfa sıkıştırılmaz, ancak satır sıkıştırılabilir.
- Her bir kümelenmemiş dizinin ayrı bir sıkıştırma ayarı vardır ve temel alınan tablonun sıkıştırma ayarını devralmaz.
- Kümelenmiş dizin bir yığında oluşturulduğunda, kümelenmiş dizin, alternatif bir sıkıştırma durumu belirtilmediği sürece yığının sıkıştırma durumunu devralır.
Sıkıştırma durumunu değiştirmenin bir tablo, dizin veya bölüm tarafından alan kullanımını nasıl etkilediğini değerlendirmek için sp_estimate_data_compression_savings saklı yordamını kullanın.
XML sıkıştırma
için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.
Veri sıkıştırma konusunda dikkat edilmesi gerekenlerin çoğu XML sıkıştırma için geçerlidir. Aşağıdaki noktaları da bilmeniz gerekir:
- Bölümlerin listesi belirtildiğinde, XML sıkıştırması tek tek bölümlerde etkinleştirilebilir. Bölüm listesi belirtilmezse, tüm bölümler XML sıkıştırması kullanacak şekilde ayarlanır. Tablo veya dizin oluşturulduğunda, aksi belirtilmedikçe XML veri sıkıştırma devre dışı bırakılır. Bir tablo değiştirildiğinde, aksi belirtilmedikçe mevcut sıkıştırma korunur.
- Bölümlerin listesini veya aralık dışında olan bir bölümü belirtirseniz bir hata oluşturulur.
- Bir yığında kümelenmiş dizin oluşturulduğunda, alternatif bir sıkıştırma seçeneği belirtilmediği sürece kümelenmiş dizin yığının XML sıkıştırma durumunu devralır.
- Bir yığının XML sıkıştırma ayarının değiştirilmesi, yığındaki yeni satır konumlarına yönelik işaretçilere sahip olmaları için tablodaki tüm kümelenmemiş dizinlerin yeniden oluşturulmasını gerektirir.
- XML sıkıştırmasını çevrimiçi veya çevrimdışı olarak etkinleştirebilir veya devre dışı bırakabilirsiniz. Bir yığında sıkıştırmayı etkinleştirmek, çevrimiçi bir işlem için tek iş parçacıklı bir işlemdir.
- Bölümlenmiş tablodaki bölümlerin XML sıkıştırma durumunu belirlemek için katalog görünümünün sütununu
sys.partitions
kullanınxml_compression
.
Dizin istatistikleri
Bir rowstore dizini oluşturulduğunda, Veritabanı Altyapısı da dizinin anahtar sütunları üzerinde istatistikler oluşturur. sys.stats katalog görünümündeki istatistik nesnesinin adı dizinin adıyla eşleşir. Bölümlenmemiş bir dizin için istatistikler, verilerin tam taraması kullanılarak oluşturulur. Bölümlenmiş dizin için istatistikler varsayılan örnekleme algoritması kullanılarak oluşturulur.
Bir columnstore dizini oluşturulduğunda, Veritabanı Altyapısı sys.stats içinde de bir istatistik nesnesi oluşturur. Bu istatistik nesnesi histogram ve yoğunluk vektörü gibi istatistik verileri içermez. Veritabanı betiği oluşturularak veritabanı kopyası oluşturulurken kullanılır. Bu sırada ve UPDATE STATISTICS ... WITH STATS_STREAM
komutları segment, DBCC SHOW_STATISTICS
sözlük ve delta deposu boyutu gibi columnstore meta verilerini almak ve bunu columnstore dizinindeki istatistiklere eklemek için kullanılır. Bu meta veriler, normal bir veritabanı için sorgu derleme zamanında dinamik olarak alınır, ancak veritabanı kopyası için istatistik nesnesi tarafından sağlanır.
UPDATE STATISTICS komutu, başka bir senaryoda columnstore dizinindeki istatistik nesnesi için desteklenmez.
İzinler
ALTER
Tablo veya görünüm veya sabit veritabanı rolü üyeliği üzerinde db_ddladmin
izin gerektirir.
Sınırlamalar ve kısıtlamalar
Azure Synapse Analytics ve Analytics Platform Sistemi'nde (PDW) şunları oluşturamazsınız:
- Bir columnstore dizini zaten mevcut olduğunda veri ambarı tablosunda kümelenmiş veya kümelenmemiş satır deposu dizini. Bu davranış, hem satır deposu hem de columnstore dizinlerinin aynı tabloda birlikte var olmasını sağlayan SMP SQL Server'dan farklıdır.
- Görünümde dizin oluşturamazsınız.
Meta veriler
Mevcut dizinler hakkındaki bilgileri görüntülemek için sys.indexes katalog görünümünü sorgulayabilirsiniz.
Sürüm notları
- Azure SQL Veritabanı dışında
PRIMARY
dosya gruplarını desteklemez. - Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği seçenekleri desteklemez
FILESTREAM
. - Columnstore dizinleri SQL Server 2012 (11.x) öncesinde kullanılamaz.
- Devam ettirilebilen dizin işlemleri SQL Server 2017 (14.x) ile başlayarak, Azure SQL Veritabanı'nda ve Azure SQL Yönetilen Örneği'nde kullanılabilir.
Örnekler: Tüm sürümler. AdventureWorks veritabanını kullanır
A. Basit bir kümelenmemiş satır deposu dizini oluşturma
Aşağıdaki örnekler, VendorID
tablosunun Purchasing.ProductVendor
sütununda kümelenmemiş bir dizin oluşturur.
CREATE INDEX IX_VendorID ON ProductVendor (VendorID);
CREATE INDEX IX_VendorID ON dbo.ProductVendor (VendorID DESC, Name ASC, Address DESC);
CREATE INDEX IX_VendorID ON Purchasing..ProductVendor (VendorID);
B. Basit bir kümelenmemiş satır deposu bileşik dizini oluşturma
Aşağıdaki örnek, SalesQuota
tablosunun SalesYTD
ve Sales.SalesPerson
sütunlarında kümelenmemiş bileşik dizin oluşturur.
CREATE NONCLUSTERED INDEX IX_SalesPerson_SalesQuota_SalesYTD ON Sales.SalesPerson (SalesQuota, SalesYTD);
C. Başka bir veritabanındaki tabloda dizin oluşturma
Aşağıdaki örnek, VendorID
veritabanındaki ProductVendor
tablosunun Purchasing
sütununda kümelenmiş bir dizin oluşturur.
CREATE CLUSTERED INDEX IX_ProductVendor_VendorID ON Purchasing..ProductVendor (VendorID);
D. Dizine sütun ekleme
Aşağıdaki örnek, dbo'dan iki sütun içeren dizin IX_FF oluşturur. FactFinance tablosu. Sonraki deyim, dizini bir sütun daha ile yeniden oluşturur ve mevcut adı korur.
CREATE INDEX IX_FF ON dbo.FactFinance (FinanceKey ASC, DateKey ASC);
-- Rebuild and add the OrganizationKey
CREATE INDEX IX_FF ON dbo.FactFinance (FinanceKey, DateKey, OrganizationKey DESC)
WITH (DROP_EXISTING = ON);
Örnekler: SQL Server, Azure SQL Veritabanı
E. Benzersiz bir kümelenmemiş dizin oluşturma
Aşağıdaki örnek, Name
veritabanındaki Production.UnitMeasure
tablosunun AdventureWorks2022
sütununda benzersiz bir kümelenmemiş dizin oluşturur. Dizin, Name
sütununa eklenen veriler üzerinde benzersizliği zorlar.
CREATE UNIQUE INDEX AK_UnitMeasure_Name
ON Production.UnitMeasure(Name);
Aşağıdaki sorgu, var olan bir satıra aynı değere sahip bir satır eklemeyi deneyerek benzersizlik kısıtlamasını test ediyor.
-- Verify the existing value.
SELECT Name FROM Production.UnitMeasure WHERE Name = N'Ounces';
GO
INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OC', 'Ounces', GETDATE());
Sonuçta elde edilen hata iletisi:
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.
F. IGNORE_DUP_KEY seçeneğini kullanma
Aşağıdaki örnekte, geçici bir tabloya ilk olarak birden çok satır ekleyerek IGNORE_DUP_KEY
seçeneğinin etkisini gösterir ve seçenek ON
olarak ayarlanır ve seçenek OFF
olarak ayarlanır.
#Test
tablosuna, ikinci çok satırlı INSERT
deyimi yürütülürken kasıtlı olarak yinelenen bir değere neden olacak tek bir satır eklenir. Tablodaki satır sayısı, eklenen satır sayısını döndürür.
CREATE TABLE #Test (C1 NVARCHAR(10), C2 NVARCHAR(50), C3 DATETIME);
GO
CREATE UNIQUE INDEX AK_Index ON #Test (C2)
WITH (IGNORE_DUP_KEY = ON);
GO
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());
INSERT INTO #Test SELECT * FROM Production.UnitMeasure;
GO
SELECT COUNT(*) AS [Number of rows] FROM #Test;
GO
DROP TABLE #Test;
GO
İkinci INSERT
deyiminin sonuçları aşağıdadır.
Server: Msg 3604, Level 16, State 1, Line 5 Duplicate key was ignored.
Number of rows
--------------
38
Production.UnitMeasure
tablosundan eklenen ve benzersizlik kısıtlamasını ihlal etmeyen satırların başarıyla eklendiğine dikkat edin. Bir uyarı verildi ve yinelenen satır yoksayıldı, ancak işlemin tamamı geri alınmadı.
Aynı deyimler yeniden yürütülür, ancak IGNORE_DUP_KEY
OFF
olarak ayarlanır.
CREATE TABLE #Test (C1 NVARCHAR(10), C2 NVARCHAR(50), C3 DATETIME);
GO
CREATE UNIQUE INDEX AK_Index ON #Test (C2)
WITH (IGNORE_DUP_KEY = OFF);
GO
INSERT INTO #Test VALUES (N'OC', N'Ounces', GETDATE());
INSERT INTO #Test SELECT * FROM Production.UnitMeasure;
GO
SELECT COUNT(*) AS [Number of rows] FROM #Test;
GO
DROP TABLE #Test;
GO
İkinci INSERT
deyiminin sonuçları aşağıdadır.
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
Production.UnitMeasure
tablosundaki yalnızca bir satır UNIQUE
dizin kısıtlamasını ihlal etse bile tabloya hiçbir satır eklenmediğini unutmayın.
G. Dizini bırakmak ve yeniden oluşturmak için DROP_EXISTING kullanma
Aşağıdaki örnek, ProductID
seçeneğini kullanarak Production.WorkOrder
veritabanındaki AdventureWorks2022
tablosunun DROP_EXISTING
sütununda var olan bir dizini bırakır ve yeniden oluşturur.
FILLFACTOR
ve PAD_INDEX
seçenekleri de ayarlanır.
CREATE NONCLUSTERED INDEX IX_WorkOrder_ProductID
ON Production.WorkOrder(ProductID)
WITH (FILLFACTOR = 80,
PAD_INDEX = ON,
DROP_EXISTING = ON);
GO
H. Görünümde dizin oluşturma
Aşağıdaki örnek, bu görünümde bir görünüm ve dizin oluşturur. Dizinli görünümü kullanan iki sorgu eklenir.
-- 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
Ben. Dahil edilen (anahtar olmayan) sütunlarla dizin oluşturma
Aşağıdaki örnek, bir anahtar sütunu (PostalCode
) ve dört anahtar olmayan sütun (AddressLine1
, AddressLine2
, City
, StateProvinceID
) ile kümelenmemiş bir dizin oluşturur. Dizinin kapsadığı sorgu aşağıdaki gibidir. Sorgu iyileştiricisi tarafından seçilen dizini görüntülemek için, SQL Server Management Studio'daki
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
J. Bölümlenmiş dizin oluşturma
Aşağıdaki örnek, TransactionsPS1
veritabanında var olan bir bölüm düzeni olan AdventureWorks2022
üzerinde kümelenmemiş bölümlenmiş dizin oluşturur. Bu örnekte bölümlenmiş dizin örneğinin yüklendiği varsayılır.
CREATE NONCLUSTERED INDEX IX_TransactionHistory_ReferenceOrderID
ON Production.TransactionHistory (ReferenceOrderID)
ON TransactionsPS1 (TransactionDate);
GO
K. Filtrelenmiş dizin oluşturma
Aşağıdaki örnek, AdventureWorks2022
veritabanındaki Production.BillOfMaterials tablosunda filtrelenmiş bir dizin oluşturur. Filtre koşulu, filtrelenmiş dizinde anahtar sütun olmayan sütunlar içerebilir. Bu örnekteki koşul yalnızca EndDate değerinin NULL olmayan satırları seçer.
CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithEndDate"
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL;
L. Sıkıştırılmış dizin oluşturma
Aşağıdaki örnek, satır sıkıştırma kullanarak bölümlenmemiş bir tabloda dizin oluşturur.
CREATE NONCLUSTERED INDEX IX_INDEX_1
ON T1 (C2)
WITH (DATA_COMPRESSION = ROW);
GO
Aşağıdaki örnek, dizinin tüm bölümlerinde satır sıkıştırma kullanarak bölümlenmiş bir tabloda dizin oluşturur.
CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (DATA_COMPRESSION = ROW);
GO
Aşağıdaki örnek, dizinin bölüm 1
sayfa sıkıştırma ve dizinin 2
aracılığıyla 4
bölümlerde satır sıkıştırma kullanarak bölümlenmiş tabloda bir dizin oluşturur.
CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (
DATA_COMPRESSION = PAGE ON PARTITIONS(1),
DATA_COMPRESSION = ROW ON PARTITIONS (2 TO 4)
);
GO
M. XML sıkıştırması ile dizin oluşturma
için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.
Aşağıdaki örnek, XML sıkıştırması kullanarak bölümlenmemiş bir tabloda dizin oluşturur. Dizindeki en az bir sütun xml veri türü olmalıdır.
CREATE NONCLUSTERED INDEX IX_INDEX_1
ON T1 (C2)
WITH (XML_COMPRESSION = ON);
GO
Aşağıdaki örnek, dizinin tüm bölümlerinde XML sıkıştırması kullanarak bölümlenmiş tabloda bir dizin oluşturur.
CREATE CLUSTERED INDEX IX_PartTab2Col1
ON PartitionTable1 (Col1)
WITH (XML_COMPRESSION = ON);
GO
N. Sürdürülebilir dizin işlemleri oluşturma, sürdürme, duraklatma ve durdurma
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
-- Execute a resumable online index create statement with MAXDOP=1
CREATE INDEX test_idx1 ON test_table (col1) WITH (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);
-- Executing the same command again (see above) after an index operation was paused, resumes automatically the index create operation.
-- Execute a resumable online index creates operation with MAX_DURATION set to 240 minutes. After the time expires, the resumable index create operation is paused.
CREATE INDEX test_idx2 ON test_table (col2) WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);
-- Pause a running resumable online index creation
ALTER INDEX test_idx1 ON test_table PAUSE;
ALTER INDEX test_idx2 ON test_table PAUSE;
-- Resume a paused online index creation
ALTER INDEX test_idx1 ON test_table RESUME;
ALTER INDEX test_idx2 ON test_table RESUME;
-- Abort resumable index create operation which is running or paused
ALTER INDEX test_idx1 ON test_table ABORT;
ALTER INDEX test_idx2 ON test_table ABORT;
O. Farklı düşük öncelikli kilit seçenekleriyle CREATE INDEX
Aşağıdaki örneklerde, engellemeyle ilgilenmek için farklı stratejiler belirtmek için WAIT_AT_LOW_PRIORITY
seçeneği kullanılır.
--Kill this session after waiting 5 minutes
CREATE CLUSTERED INDEX idx_1 ON dbo.T2 (a) WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = SELF)));
GO
--Kill blocker sessions
CREATE CLUSTERED INDEX idx_1 ON dbo.T2 (a) WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = BLOCKERS)));
GO
Aşağıdaki örnek hem RESUMABLE
seçeneğini kullanır hem de iki MAX_DURATION
değeri belirtir; birincisi ABORT_AFTER_WAIT
seçeneği için, ikincisi RESUMABLE
seçeneği için geçerlidir.
--With resumable option; default locking behavior
CREATE CLUSTERED INDEX idx_1 ON dbo.T2 (a) WITH (ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 5 MINUTES, ABORT_AFTER_WAIT = NONE)), RESUMABLE = ON, MAX_DURATION = 240 MINUTES);
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
P. Temel söz dizimi
Sürdürülebilir dizin işlemleri oluşturma, sürdürme, duraklatma ve durdurma
için geçerlidir: SQL Server 2019 (15.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği
-- Execute a resumable online index create statement with MAXDOP=1
CREATE INDEX test_idx ON test_table WITH (ONLINE = ON, MAXDOP = 1, RESUMABLE = ON);
-- Executing the same command again (see above) after an index operation was paused, resumes automatically the index create operation.
-- Execute a resumable online index creates operation with MAX_DURATION set to 240 minutes. After the time expires, the resumable index create operation is paused.
CREATE INDEX test_idx ON test_table WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 240);
-- Pause a running resumable online index creation
ALTER INDEX test_idx ON test_table PAUSE;
-- Resume a paused online index creation
ALTER INDEX test_idx ON test_table RESUME;
-- Abort resumable index create operation which is running or paused
ALTER INDEX test_idx ON test_table ABORT;
Q. Geçerli veritabanındaki bir tabloda kümelenmemiş dizin oluşturma
Aşağıdaki örnek, VendorID
tablosunun ProductVendor
sütununda kümelenmemiş bir dizin oluşturur.
CREATE INDEX IX_ProductVendor_VendorID
ON ProductVendor (VendorID);
R. Başka bir veritabanındaki tabloda kümelenmiş dizin oluşturma
Aşağıdaki örnek, VendorID
veritabanındaki ProductVendor
tablosunun Purchasing
sütununda kümelenmemiş bir dizin oluşturur.
CREATE CLUSTERED INDEX IX_ProductVendor_VendorID
ON Purchasing..ProductVendor (VendorID);
S. Tabloda sıralı kümelenmiş dizin oluşturma
Aşağıdaki örnek, c1
veritabanındaki c2
tablosunun T1
ve MyDB
sütunlarında sıralı bir kümelenmiş dizin oluşturur.
CREATE CLUSTERED COLUMNSTORE INDEX MyOrderedCCI ON MyDB.dbo.T1
ORDER (c1, c2);
T. CCI'yi tablodaki sıralı kümelenmiş dizine dönüştürme
Aşağıdaki örnek, mevcut kümelenmiş columnstore dizinini MyOrderedCCI
üzerinde c1
adlı sıralı bir kümelenmiş columnstore dizinine dönüştürür ve c2
veritabanındaki T2
tablosunun MyDB
sütunlarını c2
.
CREATE CLUSTERED COLUMNSTORE INDEX MyOrderedCCI ON MyDB.dbo.T2
ORDER (c1, c2)
WITH (DROP_EXISTING = ON);
İlgili içerik
- SQL Server Dizin Mimarisi ve Tasarım Kılavuzu
- Dizin İşlemlerini Çevrimiçi Gerçekleştirme
- Dizinleri ve ALTER TABLE
- ALTER INDEX
- CREATE PARTITION FUNCTION
- BÖLÜM DÜZENI OLUŞTURMA
- CREATE SPATIAL INDEX
- CREATE STATISTICS
- CREATE TABLE
- CREATE XML INDEX
- Veri Türleri
- DBCC SHOW_STATISTICS
- DROP INDEX
- XML Dizinleri (SQL Server)
- sys.indexes
- sys.index_columns
- sys.xml_indexes
- EVENTDATA