Aracılığıyla paylaş


Seçmeli XML dizinleri (SXI)

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

Seçmeli XML dizinleri, normal XML dizinlerine ek olarak kullanabileceğiniz başka bir XML dizini türüdür. Seçmeli XML dizini özelliğinin hedefleri şunlardır:

  • SQL Server'da depolanan XML verileri üzerinde sorguların performansını geliştirmek için.

  • Büyük XML veri iş yüklerinde daha hızlı dizin oluşturmayı desteklemek için.

  • XML dizinlerinin depolama maliyetlerini azaltarak ölçeklenebilirliği geliştirmek.

Normal XML dizinlerinin temel sınırlaması, XML belgesinin tamamını dizine aldırmalarıdır. Bu, sorgu performansının düşmesi ve dizin bakım maliyetinin artması gibi, çoğunlukla dizinin depolama maliyetleriyle ilgili birçok önemli dezavantaja yol açar.

Seçmeli XML dizini özelliği, XML belgelerinden dizine yalnızca belirli yolları yükseltmenize olanak tanır. Dizin oluşturma zamanında bu yollar değerlendirilir ve işaret ettikleri düğümler parçalanır ve SQL Server'da ilişkisel bir tablo içinde depolanır. Bu özellik, SQL Server ürün ekibiyle işbirliği içinde Microsoft Research tarafından geliştirilen verimli bir eşleme algoritması kullanır. Bu algoritma, XML düğümlerini tek bir ilişkisel tabloyla eşler ve yalnızca mütevazı depolama alanı gerektirirken olağanüstü performans elde eder.

Seçmeli XML dizini özelliği, seçmeli XML dizini tarafından dizinlenmiş düğümler üzerinde ikincil seçmeli XML dizinlerini de destekler. Bu ikincil seçmeli dizinler verimlidir ve sorguların performansını daha da artırır.

Seçmeli XML dizinlerinin avantajları

Seçmeli XML dizinleri aşağıdaki avantajları sağlar:

  1. Tipik sorgu yükleri için XML veri türü üzerinde büyük ölçüde geliştirilmiş sorgu performansı.

  2. Normal XML dizinleriyle karşılaştırıldığında daha az depolama gereksinimleri.

  3. Normal XML dizinleriyle karşılaştırıldığında dizin bakım maliyetleri azaltıldı.

  4. Seçmeli XML dizinlerinden yararlanmak için uygulamaları güncelleştirmeye gerek yoktur.

Seçmeli XML dizinleri ve birincil XML dizinleri

Önemli

Daha iyi performans ve daha verimli depolama için çoğu durumda sıradan bir XML dizini yerine seçmeli XML dizini oluşturun.

Ancak, aşağıdaki koşullardan biri doğru olduğunda seçmeli XML dizini önerilmez:

  • Çok sayıda düğüm yolunu haritalarsınız.

  • Bilinmeyen öğeler veya belgede bilinmeyen bir konumdaki öğeler için sorguları destekliyorsunuz.

Seçmeli XML dizini örneği

Aşağıdaki XML parçasını yaklaşık 500.000 satırlık bir tabloda XML belgesi olarak düşünün:

<book>
    <created>2004-03-01</created>
    <authors>Various</authors>
    <subjects>
        <subject>English wit and humor -- Periodicals</subject>
        <subject>AP</subject>
    </subjects>
    <title>Punch, or the London Charivari, Volume 156, April 2, 1919</title>
    <id>etext11617</id>
</book>

Bu basit şemanın birçok satırı üzerinde birincil XML dizini oluşturmak uzun zaman alır. Bu verilerin sorgulanması, birincil XML dizininin seçmeli dizin oluşturmayı desteklememesi gerçeğinden de kaynaklanır.

Eğer bu verileri yalnızca /book/title yolu ve /book/subjects yolu üzerinden sorgulamanız gerekiyorsa, aşağıdaki seçmeli XML dizinini oluşturabilirsiniz.

CREATE SELECTIVE XML INDEX SXI_index
ON Tbl(xmlcol)
FOR
(
    pathTitle = '/book/title/text()' AS XQUERY 'xs:string',
    pathAuthors = '/book/authors' AS XQUERY 'node()',
    pathId = '/book/id' AS SQL NVARCHAR(100)
);

Yukarıdaki deyim, seçmeli XML dizini oluştururken kullandığınız CREATE söz diziminin iyi bir örneğidir. CREATE deyiminde, önce dizin için bir ad sağlar ve dizine oluşturulacak tabloyu ve XML sütununu tanımlarsınız. Ardından dizine ekleme yollarını sağlarsınız. Bir yolun üç bölümü vardır:

  1. Yolu benzersiz olarak tanımlayan bir ad.

  2. Yolu açıklayan bir XQuery ifadesi.

  3. İsteğe bağlı iyileştirme ipuçları.

Bu öğeler hakkında daha fazla bilgi için bkz. İlgili Görevler.

Desteklenen Özellikler, Önkoşullar ve Sınırlamalar

Desteklenen XML özellikleri

Seçmeli XML dizinleri, SQL Server tarafından desteklenen XQuery'yi, exist(), value() ve nodes() yöntemleri içinde destekler.

  • ve exist() yöntemleri için value()nodes(), seçmeli XML dizinleri ifadenin tamamını dönüştürmek için yeterli bilgi içerir.

  • query() ve modify() yöntemleri için, yalnızca düğüm filtreleme amacıyla seçmeli XML dizinleri kullanılabilir.

  • yöntemi için query() , sonuçları almak için seçmeli XML dizinleri kullanılmaz.

  • yöntemi için modify() , XML belgelerini güncelleştirmek için seçmeli XML dizinleri kullanılmaz.

Desteklenmeyen XML özellikleri

Seçmeli XML dizinleri, XML'nin SQL Server uygulamasında desteklenen aşağıdaki özellikleri desteklemez:

  • Karmaşık XS türlerine sahip düğümlerin dizinlenmesi: birleşim türleri, sıra türleri ve liste türleri.

  • İkili XS türlerine sahip düğümlerin dizinlenmesi: örneğin, base64Binary ve hexBinary.

  • Sonunda joker karakteri * içeren XPath ifadeleriyle dizine eklenecek düğümleri belirtme: Örneğin, /a/b/c/*, /a//b/*veya /a/b/*:c.

  • Alt, öznitelik veya ardıl dışındaki herhangi bir ekseni dizinleme. Özel bir durum olarak //<step> durumu izin verilir.

  • XML işleme yönergelerini ve açıklamalarını dizine alma.

  • id() işlevini kullanarak bir düğümün tanımlayıcısını belirtme ve alma.

Önkoşullar

Kullanıcı tablosundaki bir XML sütunu üzerinde seçmeli XML dizini oluşturabilmeniz için aşağıdaki önkoşulların mevcut olması gerekir:

  • Kullanıcı tablosunun birincil anahtarında kümelenmiş dizin bulunmalıdır.

  • Kullanıcı tablosunun birincil anahtarı, seçmeli XML dizinleriyle kullanıldığında 128 bayt boyutuyla sınırlıdır.

  • Kullanıcı tablosunun kümeleme anahtarı, seçmeli XML dizinleriyle kullanıldığında 15 sütunla sınırlıdır.

Sınırlamalar

Genel gereksinimler ve sınırlamalar

  • Her seçmeli XML dizini yalnızca tek bir XML sütununda oluşturulabilir
  • XML olmayan bir sütunda seçmeli XML dizini oluşturamazsınız
  • Tablodaki her XML sütunu yalnızca bir seçmeli XML dizinine sahip olabilir
  • Her tabloda en fazla 249 seçmeli XML dizini olabilir.

Desteklenen nesnelerle ilgili sınırlamalar

Aşağıdaki nesnelerde seçmeli XML dizinleri oluşturamazsınız:

  • Görünümdeki XML sütunları
  • XML sütunlarına sahip tablo-değerli değişken
  • XML türü değişkenleri
  • Hesaplanan XML sütunları
  • 128'den fazla iç içe düğüm derinliğine sahip XML sütunları.

Depolama sınırlamaları

XML belgesinden dizine eklenebilen düğüm sayısı üzerinde sınırlı bir sınır vardır. Seçmeli XML dizini, XML belgelerini tek bir ilişkisel tabloyla eşler. Bu nedenle, tablonun belirli bir satırında 1024'ten fazla null olmayan sütunu olamaz. Ayrıca, seyrek sütunların sınırlamalarının çoğu, dizinler depolama için seyrek sütunlar kullandığından seçmeli XML dizinleri için de geçerlidir.

Belirli bir satırda desteklenen null olmayan sütun sayısı, sütunlardaki verilerin boyutuna bağlıdır:

  • En iyi durumda, tüm sütunlar bit türünde olduğunda null olmayan 1024 sütun desteklenir.

  • En kötü durumda, tüm sütunlar varchar türünde büyük nesneler olduğunda yalnızca 236 null olmayan sütun desteklenir.

Seçmeli XML dizinleri, dizine alınan her düğüm yolu için dahili olarak bir ila dört sütun kullanır. Dizine alınabilecek düğümlerin toplam sayısı, dizine alınan yollardaki verilerin gerçek boyutuna bağlı olarak 60 ile birkaç yüz düğüm arasında değişir.

  • En kötü durumda, düğüm yolu tanımında kullanılarak // bazı veya tüm düğümler eşlendiğinde, dizine alınan düğüm sayısı üst sınırı 60'tır.

  • En iyi durumda, düğümler // kullanılmadan düğüm yolu tanımına eşlendiğinde, dizine alınabilecek maksimum düğüm sayısı 200'dür.

Dizini OLUŞTUR veya DEĞIŞTIR'i kullandığınızda seçmeli XML dizinleri yeniden oluşturulur

Seçmeli XML dizini OLUŞTURDUĞUNUZDA veya DEĞİŞTİRDİĞİNİZDE, tek iş parçacıklı, çevrimdışı modda yeniden oluşturulur. Sık sık ALTER deyimleri, dizine alınan XML belgeleri üzerinde sorguların performansını olumsuz etkiler.

Diğer sınırlamalar

  • Seçmeli XML dizinleri sorgu ipuçlarında desteklenmez.

  • Veritabanı Ayarlama Danışmanı'nda seçmeli XML dizinleri ve ikincil seçmeli XML dizinleri desteklenmez.

Ayrıca bakınız