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.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Belirlenmiş bir tabloda bir XML indeksi oluşturur. Tabloda veri olmadan önce bir indeks oluşturulabilir. XML indeksleri, nitelikli bir veritabanı adı belirterek başka bir veritabanındaki tablolarda oluşturulabilir.
Uyarı
İlişkisel bir indeks oluşturmak için bkz. CREATE INDEX (Transact-SQL) bölümünü ziyaret edin. Uzaysal indeks oluşturma hakkında bilgi için bkz. UZAMSAL İNDEKS OLUŞTUR (Transact-SQL).
Transact-SQL söz dizimi kuralları
Sözdizimi
--Create XML Index
CREATE [ PRIMARY ] XML INDEX index_name
ON <object> ( xml_column_name )
[ USING XML INDEX xml_index_name
[ FOR { VALUE | PATH | PROPERTY } ] ]
[ WITH ( <xml_index_option> [ ,...n ] ) ]
[ ; ]
<object> ::=
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
<xml_index_option> ::=
{
PAD_INDEX = { ON | OFF }
| FILLFACTOR = fillfactor
| SORT_IN_TEMPDB = { ON | OFF }
| IGNORE_DUP_KEY = OFF
| DROP_EXISTING = { ON | OFF }
| ONLINE = OFF
| ALLOW_ROW_LOCKS = { ON | OFF }
| ALLOW_PAGE_LOCKS = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| XML_COMPRESSION = { ON | OFF }
}
Arguments
[ÖNCEK] XML
Belirtilen xml sütununda bir XML indeksi oluşturur. PRIMARY belirtildiğinde, kullanıcı tablosunun kümeleme anahtarı ve bir XML düğüm tanımlayıcısından oluşan kümelenmiş anahtarla kümelenmiş bir indeks oluşturulur. Her tabloda en fazla 249 XML indeksi bulunabilir. XML indeksi oluştururken aşağıdakilere dikkat edin:
Kullanıcı tablosunun birincil anahtarında kümelenmiş dizin bulunmalıdır.
Kullanıcı tablosunun kümeleme anahtarı 15 sütunla sınırlıdır.
Bir tablodaki her xml sütununda bir birincil XML indeksi ve birden fazla ikincil XML indeksi bulunabilir.
Sütunda ikincil bir XML indeksi oluşturulmadan önce bir xml sütununda birincil XML indeksi bulunmalıdır.
Bir XML indeksi yalnızca tek bir xml sütunda oluşturulabilir. XML olmayan bir sütunda XML indeksi oluşturamazsınız, ayrıca bir xml sütunda ilişkisel bir indeks oluşturamazsınız.
Bir görünümdeki xml sütununda, xml sütunlu tablo değerli değişkende veya xml tip değişkenlerde birincil ya da ikincil bir XML indeksi oluşturamazsınız.
Hesaplanan bir xml sütununda birincil XML indeksi oluşturamazsınız.
SET seçenek ayarları, indekslenmiş görünümler ve hesaplanan sütun indeksleri için gerekli olanlarla aynı olmalıdır. Özellikle, bir XML indeksi oluşturulduğunda ve xml sütununa değerler eklendiğinde, silinirken veya güncellenirken ARITHABORT seçeneği ON olarak ayarlanmalıdır.
Daha fazla bilgi için bkz. XML Dizinleri (SQL Server).
index_name
Dizinin adı. Dizin adlarının bir tablo içinde benzersiz olması gerekir, ancak veritabanında benzersiz olması gerekmez. Dizin adları tanımlayıcıların kurallarına uymalıdır.
Birincil XML indeks adları aşağıdaki karakterlerle başlayamaz: #, ##, @, veya @@.
xml_column_name
İndeksin dayandığı xml sütunu. Tek bir XML indeks tanımında yalnızca bir xml sütunu belirtilebilir; ancak, bir XML sütununda birden fazla ikincil XML indeksi oluşturulabilir.
XML İNDEKS xml_index_name KULLANILARAK
İkincil bir XML indeksi oluşturmak için kullanılacak birincil XML indeksini belirtir.
IÇIN { DEĞER | YOL | MÜLK }
İkincil XML indeksi türünü belirtir.
VALUE
Ana sütunların (düğüm değeri ve yolu) birincil XML indeksinin olduğu sütunlarda ikincil bir XML indeksi oluşturur.
DİZİN
Birincil XML indeksindeki yol değerleri ve düğüm değerleri üzerine inşa edilen sütunlarda ikincil bir XML indeksi oluşturur. PATH ikincil indeksinde, yol ve düğüm değerleri, yol ararken verimli arama yapılmasına olanak tanıyan anahtar sütunlardır.
ÖZELLİK
PK'nın temel tablonun birincil anahtarı olduğu birincil XML indeksinin sütunlarında (PK, yol ve düğüm değeri) ikincil bir XML indeksi oluşturur.
nesne<>::=
Dizine eklenecek tam veya uygun olmayan nesne.
database_name
Veritabanının adı.
schema_name
Tablonun ait olduğu şemanın adı.
table_name
Dizine eklenecek tablonun adı.
<xml_index_option> ::=
Dizini oluştururken kullanılacak seçenekleri belirtir.
PAD_INDEX = { ON | KAPALI }
Dizin doldurmayı belirtir. Varsayılan KAPALı.
ON
Fillfactor tarafından belirtilen boş alan yüzdesi, indeksin orta seviye sayfalarına uygulanır.
OFF veya fillfactor belirtilmemiştir
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.
PAD_INDEX seçeneği yalnızca FILLFACTOR belirtildiğinde faydalıdır, çünkü PAD_INDEX FILLFACTOR tarafından belirtilen yüzdeyi kullanır. FILLFACTOR için belirtilen yüzde bir satıra izin verecek kadar büyük değilse, Database Engine dahili olarak bu yüzdeyi geçersiz kılarak minimumu kabul eder. Bir ara indeks sayfasındaki satır sayısı, fillfactor'un değeri ne kadar düşük olursa olsun asla ikiden az değildir.
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. Doldurma faktörü 1'den 100'e kadar tam sayı değeri olmalıdır. Varsayılan değer 0'dır. Eğer doldurma faktörü 100 veya 0 ise, Veritabanı Motoru yaprak sayfaları kapasitesine kadar dolu indeksler oluşturur.
Uyarı
0 ve 100 dolgu faktörü değerleri her açıdan aynıdır.
FILLFACTOR ayarı yalnızca indeks oluşturulduğunda veya yeniden oluşturulduğunda geçerlidir. Veritabanı Altyapısı, sayfalarda belirtilen boş alan yüzdesini dinamik olarak tutmaz. Doldurma faktörü ayarını görüntülemek için sys.indexes katalog görünümünü kullanın.
Önemli
100'den az FILLFACTOR ile kümelenmiş bir indeks oluşturmak, veri depolama alanını etkiler çünkü Veritabanı Motoru kümelenmiş indeks oluştururken veriyi yeniden dağıtır.
Daha fazla bilgi için bkz. Diziniçin Dolgu Faktörü Belirtme.
SORT_IN_TEMPDB = { ON | KAPALI }
Geçici sıralama sonuçlarını tempdb'de saklayıp saklamayacağını belirtir. Varsayılan KAPALı.
ON
İndeks oluşturmak için kullanılan ara sıralama sonuçları tempdb'de saklanır. Bu, tempdb kullanıcı veritabanından farklı bir disk setindeyse indeks oluşturma süresini 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.
İndeks oluşturmak için kullanıcı veritabanında gereken alana ek olarak, tempdb ara sıralama sonuçlarını tutmak için yaklaşık aynı miktarda ek alana sahip olmalıdır. Daha fazla bilgi için SORT_IN_TEMPDB Endeks Seçeneği'ne bakınız.
IGNORE_DUP_KEY = KAPALI
XML indeksleri için etkisi yoktur çünkü indeks türü asla benzersiz değildir. Bu seçeneği ON'a ayarlamayın, aksi takdirde hata oluşur.
DROP_EXISTING = { ON | KAPALI }
Adlandırılmış, önceden var olan XML indeksinin kaldırılıp yeniden oluşturulduğunu belirtir. Varsayılan KAPALı.
ON
Mevcut dizin bırakılır ve yeniden oluşturulur. Belirtilen dizin adı şu anda var olan bir dizinle aynı olmalıdır; ancak dizin tanımı değiştirilebilir. Örneğin, farklı sütunlar, sıralama düzeni, bölüm düzeni veya dizin seçenekleri belirtebilirsiniz.
OFF
Belirtilen dizin adı zaten varsa bir hata görüntülenir.
Dizin türü DROP_EXISTING kullanılarak değiştirilemez. Ayrıca, birincil XML indeksi ikincil XML indeksi olarak yeniden tanımlanamaz veya tam tersi olarak tanımlanamaz.
ÇEVRİMİÇİ = KAPALI
Dizin işlemi sırasında sorgular ve veri değişiklikleri için temel tabloların ve ilişkili dizinlerin kullanılamadığını belirtir. Bu SQL Server sürümünde, XML indeksleri için çevrimiçi indeks derlemeleri desteklenmemektedir. Bu seçenek bir XML indeksi için ON olarak ayarlanırsa hata oluşur. Ya ONLINE seçeneğini çıkar ya da ONLINE'ı KAPALI olarak ayar.
XML indeksi oluşturan, yeniden inşa eden veya kaldıran çevrimdışı bir indeks işlemi, tabloda bir şema modifikasyon (Sch-M) kilidi elde eder. Bu, işlem sırasında tüm kullanıcıların altta yatan tabloya erişimini engeller.
Uyarı
Ç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.
ALLOW_ROW_LOCKS = { ON | KAPALI }
Satır kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan ON'dur.
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 }
Sayfa kilitlerine izin verilip verilmeyeceğini belirtir. Varsayılan ON'dur.
ON
Dizine erişirken sayfa kilitlerine izin verilir. Veritabanı Altyapısı, sayfa kilitlerinin ne zaman kullanılacağını belirler.
OFF
Sayfa kilitleri kullanılmaz.
MAXDOP = max_degree_of_parallelism
Indeks işlemi sırasında Maksimum Paralellik derecesini Yapılandırma Sunucu Yapılandırma Seçeneği seçeneğini geçersiz kılar. Paralel plan yürütmesinde kullanılan işlemci sayısını sınırlamak için MAXDOP kullanın. Maksimum değer 64 işlemcidir.
Önemli
MAXDOP seçeneği tüm XML indeksleri için sözdizimsel olarak desteklense de, birincil XML indeksi için CREATE XML INDEX yalnızca tek bir işlemci kullanır.
max_degree_of_parallelism olabilir:
1
Paralel plan oluşturmayı bastırır.
>1
Paralel dizin işleminde kullanılan işlemci sayısı üst sınırını, geçerli sistem iş yüküne göre belirtilen sayıda veya daha az işlemciyle 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.
Uyarı
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.
Açıklamalar
xml veri tiplerinden türetilen hesaplanan sütunlar, hesaplanan sütun veri tipi indeks anahtarı sütunu veya anahtarsız sütun olarak izin verildiği sürece, anahtar veya dahil olmayan sütun olarak indekslenebilir. Hesaplanan bir xml sütununda birincil XML indeksi oluşturamazsınız.
XML indeksleri hakkında bilgi görüntülemek için sys.xml_indexes katalog görünümünü kullanın.
XML indeksleri hakkında daha fazla bilgi için bkz. XML İndeksleri (SQL Server).
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.
- XML dizinleri tablonun sıkıştırma özelliğini devralmıyor. Dizinleri sıkıştırmak için XML dizinlerinde XML sıkıştırmayı açıkça etkinleştirmeniz gerekir.
- İkincil XML indeksleri, Birincil XML indeksinin sıkıştırma özelliğini devralmaz.
- Varsayılan olarak, dizin oluşturulduğunda XML dizinleri için XML sıkıştırma ayarı KAPALI olarak ayarlanır.
Endeks oluşturulmasına dair ek açıklamalar
Endeks oluşturma hakkında daha fazla bilgi için CREATE INDEX (Transact-SQL) içindeki "Açıklamalar" bölümüne bakınız.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Birincil XML indeksi oluşturma
Aşağıdaki örnek, tablodaki CatalogDescription sütunda birincil bir XML indeksi Production.ProductModel oluşturur.
IF EXISTS (SELECT * FROM sys.indexes
WHERE name = N'PXML_ProductModel_CatalogDescription')
DROP INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel;
GO
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription);
GO
B. XML sıkıştırma ile birincil XML indeksi oluşturmak
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, tablodaki CatalogDescription sütunda birincil bir XML indeksi Production.ProductModel oluşturur.
IF EXISTS (SELECT * FROM sys.indexes
WHERE name = N'PXML_ProductModel_CatalogDescription')
DROP INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel;
GO
CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription)
WITH (XML_COMPRESSION = ON);
GO
C. İkincil bir XML indeksi oluşturma
Aşağıdaki örnek, tablodaki CatalogDescription sütunda ikincil bir XML indeksi Production.ProductModel oluşturur.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
DROP INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel;
GO
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel (CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH ;
GO
D. XML sıkıştırma ile ikincil bir XML indeksi 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, tablodaki CatalogDescription sütunda ikincil bir XML indeksi Production.ProductModel oluşturur.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IXML_ProductModel_CatalogDescription_Path')
DROP INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel;
GO
CREATE XML INDEX IXML_ProductModel_CatalogDescription_Path
ON Production.ProductModel (CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription FOR PATH
WITH (XML_COMPRESSION = ON);
GO
Ayrıca bakınız
- ALTER INDEX (Transact-SQL)
- İNDEKS OLUŞTUR (Transact-SQL)
- BÖLÜM FONKSİYONU OLUŞTUR (Transact-SQL)
- BÖLÜM DÜZENİ OLUŞTURMA (Transact-SQL)
- UZAYSAL İNDEKS OLUŞTUR (Transact-SQL)
- İSTATİSTİK OLUŞTUR (Transact-SQL)
- TABLO OLUŞTUR (Transact-SQL)
- Veri Türleri (Transact-SQL)
- DBCC SHOW_STATISTICS (Transact-SQL)
- DÜŞÜŞ İNDEKSİ (Transact-SQL)
- XML Dizinleri (SQL Server)
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.xml_indeksler (Transact-SQL)
- OLAY VERILERI (Transact-SQL)
- XML Dizinleri (SQL Server)