MSSQL Server XML Index

Bu makalede XML index konusuna değinmiş olacağız. XML verileri indekslemek için kullanılır. XML verileri üzerinde XPath sorguları yapmanızı sağlar. XML dizinleri, XML türündeki sütunlarda oluşturulabilen özel bir dizin türüdür. Sütununuzdaki XML verilerindeki tüm etiketleri, değerleri, yolları ve özellikleri dizinleyen birincil ve ikincil olmak üzere iki tür XML dizini vardır. XML dizinini oluşturmak istediğiniz tabloda kümelenmiş bir birincil anahtar gereklidir çünkü bu birincil anahtar, birincil XML dizinindeki satırları XML sütununu içeren tablodaki satırlarla ilişkilendirmek için kullanılır.

İlk olarak primary xml yapısını oluşturulması gerekiyor. İndex üzerinde kolonları ekleyeceğimiz zaman sadece xml kolonların geldiğini görmüş oluyoruz.

İlgili işlemin scriptini alıp index yapımızı oluşturuyoruz.

CREATE PRIMARY XML INDEX [PrimaryXmlIndex20250116153224] ON [Person].[Person]
(
        [AdditionalContactInfo]
)

İlgili primary xml index yapımızı oluşturduktan sonra  secondary xml index yapımızı oluşturuyoruz.

Burada primary xml index yapımızı seçtikten sonra secondary xml index yapımızı seçiyoruz.

Secondary Xml Index Type  detaylı bir şekilde ele alalım.

 1. PATH Secondary XML Index
 XML verilerinde XPath ifadeleri kullanılarak yapılan sorguların performansını artırır.
 XML veri yapısında yol tabanlı sorgular için hızlı erişim sağlar.
 XPath sorgularında kullanılan “path”, “value” ve “node” bileşenlerini optimize eder.

CREATE XML INDEX [SecondaryXmlIndex-20250116-154853] ON [Person].[Person]
(
	[AdditionalContactInfo]
)
USING XML INDEX [PrimaryXmlIndex-20250116-153224] FOR PATH

XPath ifadeleriyle belirli bir düğüm veya alt düğüme erişmek istiyorsanız kullanışlıdır. Yol tabanlı sorgular için kullanılmaktadır.

2. VALUE Secondary XML Index
XML verilerindeki belirli değerleri sorgulama performansını iyileştirir.
Belirli bir XML öğesindeki veya özniteliğindeki değerleri hızlı bir şekilde bulmak için kullanılır.
Değer tabanlı sorgular için optimize edilmiştir.

CREATE XML INDEX [SecondaryXmlIndex-20250116-154853] ON [Person].[Person]
(
	[AdditionalContactInfo]
)
USING XML INDEX [PrimaryXmlIndex-20250116-153224] FOR VALUE

XML içindeki belirli değerlerin sorgulanması gerektiğinde tercih edilir (örneğin, bir fiyat veya ad değeri sorgulamak).

3. PROPERTY Secondary XML Index
XML verilerinin düğüm veya özellik tabanlı sorgularını hızlandırır.
XML verilerinin düğüm seviyesindeki özelliklerini hızlıca sorgulamak için kullanılır.
Düğüm bazlı sorgulama işlemlerini optimize eder.
Kullanım Örneği:

CREATE XML INDEX [SecondaryXmlIndex-20250116-154853] ON [Person].[Person]
(
	[AdditionalContactInfo]
)
USING XML INDEX [PrimaryXmlIndex-20250116-153224] FOR PROPERTY

XML verilerindeki düğüm veya özniteliklerin detaylı sorgulanması gerektiğinde kullanılır.

 4. SELECTIVE XML INDEX
 Büyük XML verilerinde yalnızca belirli öğeleri hedef alarak sorgu performansını artırır.
 Belirli XML yollarını seçerek, yalnızca bu yolları optimize eden daha hafif bir yapı oluşturur.
 Geleneksel Secondary XML Index’lere göre daha az disk alanı kullanır.
 Kullanım Örneği:

CREATE SELECTIVE XML INDEX idx_selective 
ON TableName(ColumnName)
WITH(XMLNAMESPACES('namespace' AS ns), PATHS('Path1', 'Path2'));

Çok büyük XML sütunlarında, yalnızca sık kullanılan bölümler optimize edilmek istendiğinde kullanılır.

XML dizinleri söz konusu olduğunda ana dezavantaj, XML değerindeki her etiketin dizinde birden fazla satıra neden olması nedeniyle çok miktarda disk alanı kullanabilmeleridir. Ayrıca, tüm dizinlerde olduğu gibi, dizini güncellerken/bakımını yaparken XML sütunundaki DML işlemlerinin daha yavaş olmasına neden olacak bir miktar performans yükü vardır.

Bu makalede XML index yapılarımızı detaylı bir şekilde ele almış olduk. Başka bir makalede görüşmek dileğiyle..

Dünya hayatı yalnızca bir oyun ve bir oyalanmadan başkası değildir. Korkup-sakınmakta olanlar için ahiret yurdu gerçekten daha hayırlıdır. Yine de akıl erdirmeyecek misiniz? En’am Suresi, 32. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir