xml dizinleri (SQL Server)

xml dizinler üzerinde oluşturulabilir xmlveri türü sütun. Onlar tüm etiketleri, değerleri ve yolları sütun ve parası sorgu performansı xml örnekleri üzerine dizin. Başvurunuzu aşağıdaki durumlarda xml dizin yararlanabilirler:

  • xml sütunları sorguları yükünüzü yaygındır. Veri değişikliği sırasında xml dizin bakım maliyeti olarak kabul edilmelidir.

  • xml değerleri oldukça büyük ve alınan parçalar nispeten küçük vardır. Dizin oluşturma, çalıştırma sırasında tüm verileri ayrıştırma önler ve faydaları dizin aramaları için verimli sorgu işleme.

xml dizinler aşağıdaki kategorilere ayrılır:

  • Birincil xml dizin

  • İkincil xml dizini

İlk dizini xmltürü sütun birincil xml dizin olmalı. Birincil xml dizin kullanarak, ikincil dizinler aşağıdaki türleri desteklenir: yol, değer ve özelliği. Sorgu türüne bağlı olarak, bu ikincil dizinler sorgu performansını artırmaya yardımcı olabilir.

[!NOT]

Oluşturamaz veya xml dizin veritabanı seçenekleri ile çalışmak için doğru şekilde ayarlanmadıkça değiştirmek xmlveri türü. Daha fazla bilgi için, bkz. xml sütun tam metin araması kullanma.

xml örnekleri depolanmış olan xmlgibi büyük ikili nesneler (BLOB'lar) sütunları yazın. Bu xml örnekleri büyük olabilir ve saklanan ikili gösterimini xmlveri türü örnekleri-ebilmek var olmak ila 2 gb. Dizin, bu ikili büyük nesneler bir sorguyu değerlendirmek için çalışma zamanında rendelenmiş. Bu parçalama zaman alıcı olabilir. Örneğin, aşağıdaki sorgu göz önünde bulundurun:

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

SELECT CatalogDescription.query('
  /PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
WHERE CatalogDescription.exist ('/PD:ProductDescription/@ProductModelID[.="19"]') = 1

xml örnekleri koşulu karşılayan seçmek için WHEREtümcesi, xml büyük ikili nesne (blob) her satırda tablonun Production.ProductModelzamanında rendelenmiş. Daha sonra ifade (/PD:ProductDescription/@ProductModelID[.="19"]) olarak exist()yöntemi değerlendirilen. Bu çalışma parçalama sütunda depolanan örnek sayısı ve boyutu bağlı pahalıya mal olabilir.

xml büyük ikili nesneler (BLOB'lar) sorgulama, uygulama ortamında ortak ise, bu dizine yardımcı olur xmlsütunları yazın. Ancak, dizin veri değişikliği sırasında bakımı ile ilgili bir maliyeti yoktur.

Birincil xml dizin

Tüm etiketleri, değerleri ve yolları içinde xml sütun xml durumlarda birincil xml dizin dizinler. xml sütun oluştuğu tablonun birincil xml dizin oluşturmak için tablonun birincil anahtarı üzerinde kümelenmiş bir dizin olmalıdır. SQL Serverbirincil xml dizin satır xml sütun içeren tablo ile ilişkilendirmek için bu birincil anahtarı kullanır.

Birincil xml dizin xml BLOB'ları içinde rendelenmiş ve kalıcı bir gösterimini olduğunu xmlveri türü sütununu. Her xml ikili büyük nesne için (blob) sütununda, dizin verilerinin birden çok satır oluşturur. Dizin satır xml ikili büyük nesne yaklaşık düğümlerinin sayısına eşittir. Sorgu tam xml örneği aldığında SQL Serverxml sütun örneği sağlar. xml örnekleri sorgulara birincil xml dizin kullanın ve skalar değerler veya xml alt ağacı dizini kullanarak dönebilirsiniz.

Her satır, aşağıdaki düğüm bilgileri depolar:

  • Etiket adı bir öğe ya da öznitelik adı gibi.

  • Düğüm değeri.

  • Bir eleman düğümü, öznitelik düğümü veya metin düğümü gibi düğüm türü.

  • Bir iç düğüm tanımlayıcı tarafından temsil edilen sipariş bilgileri belgeleyin.

  • Her düğüm bir yoldan xml ağacının kök. Bu sütun için sorgu ifadelerde yolu aranır.

  • Temel tablonun birincil anahtarı. Temel tablonun birincil anahtarı geri birleştirme ile temel tablo için birincil xml dizin içinde çoğaltılır ve 15 temel tablonun birincil anahtar içinde sütun sayısı sınırlıdır.

Bu düğüm bilgileri değerlendirmek ve xml sonuçları belirtilen sorgu oluşturmak için kullanılır. Optimizasyon amaçlı, etiket adı ve düğüm türü bilgileri tamsayı değerleri olarak kodlanır ve yol sütununda aynı kodlamayı kullanır. Ayrıca, yolları, tersten yalnızca yol soneki bilindiğinde eşleşen yollar sağlamak için saklanır. Örneğin:

  • //ContactRecord/PhoneNumberyalnızca son iki adımı olduğu bilinmektedir

OR

  • /Book/*/Titlenerede joker karakteri (*) ifade ortasında belirtilen.

Birincil xml dizin ilgili sorguları için sorgu işlemci kullanan XML veri türü yöntemlerive skalar değerler veya xml alt ağaçlar birincil dizinden kendisini verir. (Bu dizin xml örneğini yeniden oluşturmak için gerekli tüm bilgileri saklar.)

Örneğin, aşağıdaki sorgu döndürür depolanan Özet bilgi CatalogDescriptionxmltürü sütununda ProductModeltablosu. Sorgu döndürür <Summary> sadece Ürün Katalog açıklaması modeller için de bilgi depolar <Features> açıklama.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")SELECT CatalogDescription.query('  /PD:ProductDescription/PD:Summary') as ResultFROM Production.ProductModelWHERE CatalogDescription.exist ('/PD:ProductDescription/PD:Features') = 1

Temel tablodaki her xml ikili büyük nesne örneğini parçalama yerine birincil xml dizin için her xml ikili büyük nesne için karşılık gelen dizin satırları ardışık olarak belirtilen ifade için aranan exist()yöntemi. Dizin yolu sütununda yol bulunursa <Summary> öğesi kendi alt ağaçları ile birlikte birincil xml dizin alınır ve xml ikili büyük nesne dönüştürülmesi sonucu olarak query()yöntemi.

Not birincil xml dizin tam bir xml örneği alınırken kullanılmaz. Örneğin, aşağıdaki sorgu tablosundan üretim yönergeleri için belirli bir ürün modeli açıklayan tüm xml örneği alır.

USE AdventureWorks2012;SELECT InstructionsFROM Production.ProductModel WHERE ProductModelID=7;

İkincil xml dizinler

Arama performansını artırmak için ikincil xml dizinler oluşturabilirsiniz. Ikincil dizinler oluşturmak için önce birincil xml dizin ilk bulunmalıdır. Türleri şunlardır:

  • path ikincil xml dizini

  • DEĞERİ ikincil xml dizini

  • ÖZELLIK ikincil xml dizini

Aşağıdakilerden bir veya daha fazla ikincil dizinler oluşturmak için bazı yönergeler verilmiştir:

  • Yükünüzü yol ifadeleri önemli ölçüde xml sütunları kullanır, path ikincil xml dizini yükünüzü kadar hızı yüksektir. En yaygın kullanımı olduğu exist() yöntemi xml sütunlar Transact-SQL where yan tümcesi.

  • Bireysel xml örneklerini yol ifadeleri kullanarak, birden çok değer yükünüzü alan, içinde her xml örneği özelliği dizin yolları kümeleme yararlı olabilir. Nesnenin özelliklerini getirilen ve birincil anahtar değerini bilinen bu senaryo bir özellik çantası senaryoda genellikle oluşur.

  • Bu değerler içeren öğe veya öznitelik adları bilmeden içinde xml örnekleri değerlerini sorgulama yükünüzü içeriyorsa, değer dizini oluşturmak isteyebilirsiniz. Bu genellikle //author gibi alt eksen aramaları ile oluşur [last-name "Howard" =] burada <yazar> öğeleri herhangi bir hiyerarşi düzeyinde oluşabilir. O da /book gibi joker sorgularda oluşur [@ * "Roman" =], sorgu aradığı yerlerde <kitap> bazı öznitelik değeri "Roman" sahip olan öğeler.

path ikincil xml dizini

Sorgularınızı genellikle yol ifadeleri Tarih belirtirseniz, xmltürü sütunları, path ikincil dizin aramayı hızlandırmak mümkün olabilir. Belirtme sorgu var bu konunun önceki kısımlarında açıklandığı gibi birincil dizin yararlıdır exist() yöntemi where yan tümcesi. path ikincil dizin eklerseniz, bu tür sorgular'de arama performansı da artırabilir.

Birincil xml dizin xml büyük ikili nesneler zamanında parçalayıp gerek kalmadan önler, ancak yol ifadelerini temel sorgular için en iyi performansını sağlamayabilir. Tüm satırlar için bir xml ikili büyük nesne karşılık gelen birincil xml dizin büyük xml örnekleri için sırayla aranır, sıralı arama yavaş olabilir. Bu durumda ikincil dizin yolu değerleri ve birincil dizin düğümü değerleri üzerine kurulmuş olan önemli ölçüde dizin aramayı hızlandırabilirsiniz. YOLU ikincil dizin yolu ve düğüm daha verimli yollarını ararken arama izin anahtar sütunları değerlerdir. Query optimizer yolu dizin ifadeleri aşağıdaki gösterildiği gibi kullanabilirsiniz:

  • /root/Locationbir yol belirtmek

OR

  • /root/Location/@LocationID[.="10"]burada hem yolu hem de düğüm değeri belirtilir.

YOLU dizin yararlı olduğu aşağıdaki sorgu gösterir:

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

SELECT CatalogDescription.query('
  /PD:ProductDescription/PD:Summary
') AS Result
FROM Production.ProductModel
WHERE CatalogDescription.exist ('/PD:ProductDescription/@ProductModelID[.="19"]') = 1

Sorgu, yol ifadesi /PD:ProductDescription/@ProductModelID ve "19"de exist()yöntemi karşılık yolu dizin anahtar alanları. Bu, doğrudan yol dizinde aramak ve daha iyi arama performansını daha birincil dizin yolu değerleri sıralı arama sağlar sağlar.

DEĞERİ ikincil xml dizini

Sorguları değeri bağlı olarak, örneğin, eğer /Root/ProductDescription/@*[. = "Mountain Bike"] ya //ProductDescription[@Name = "Mountain Bike"]ve yolu tam olarak belirtilmemiş veya joker karakter içeren, düğüm değerlerini birincil xml dizin oluşturulmuş ikincil bir xml dizin oluşturarak daha hızlı sonuçlar elde.

(Düğüm değeri ve yolu) değer dizin anahtar sütunları olan birincil xml dizin. İş yükünüzü değerleri içeren öğe veya öznitelik adlarını bilmeden xml örnekleri değerlerini sorgulama içeriyorsa, bir değer endeksi yararlı olabilir. Örneğin, aşağıdaki ifade, bir değer indeksine sahip yararlanacaktır:

  • //author[LastName="someName"]Burada değerini biliyorum <LastName>öğesi, ama <author>üst yerde oluşabilir.

  • /book[@* = "someValue"]Sorgu burada arar <book>bazı öznitelik değerine sahip olan eleman "someValue".

Aşağıdaki sorgu döndürür ContactIDdan Contacttablosu. WHEREYan belirtir değerleri arar bir filtre AdditionalContactInfo xmltürü sütun. Kişinin kimlikleri yalnızca verilir ise ilgili ek iletişim bilgilerini xml ikili büyük nesne belirli telefon numarası içerir. Çünkü <telephoneNumber> öğesi xml içinde herhangi bir yerde görünebilir, alt veya kendini eksen yol ifadesi belirler.

WITH XMLNAMESPACES (
  'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS CI,
  'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)

SELECT ContactID 
FROM   Person.Contact
WHERE  AdditionalContactInfo.exist('//ACT:telephoneNumber/ACT:number[.="111-111-1111"]') = 1

Bu durumda, arama değeri için <number> bilinmektedir, ancak herhangi bir xml örneği bir çocuk olarak görünebilir <telephoneNumber> öğesi. Bu tür sorgu, belirli bir değere göre bir dizin araması yarar.

ÖZELLIK ikincil dizini

Bir veya daha fazla deerleri bireysel xml örneklerini sorguları özelliği dizinden yararlanabilir. Bu senaryoyu kullanarak nesne özelliklerini almak oluşur value() yöntemi xmltürü ve ne zaman nesnenin birincil anahtar değeri bilinmektedir.

ÖZELLIK dizini pk temel tablonun birincil anahtarı olduğu birincil xml dizin sütunları (BA, yol ve düğüm değeri) kurulmuştur.

Örneğin, ürün modeli için 19, aşağıdaki sorgu alır ProductModelIDve ProductModelNameöznitelik değerlerini kullanarak value()yöntemi. Birincil xml dizin veya diğer ikincil xml dizinleri kullanmak yerine, özellik dizini daha hızlı bir çalıştırma sağlar.

WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS "PD")

SELECT CatalogDescription.value('(/PD:ProductDescription/@ProductModelID)[1]', 'int') as ModelID,
       CatalogDescription.value('(/PD:ProductDescription/@ProductModelName)[1]', 'varchar(30)') as ModelName        
FROM Production.ProductModel   
WHERE ProductModelID = 19

Bu konuda daha ileride anlatılacağı farkları hariç, xml oluşturma dizin üzerinde bir xml türü sütun olmayan bir dizin oluşturmaya benzer- xml türü sütun. Aşağıdaki Transact-SQLddl deyimleri oluşturmak ve xml dizinleri yönetmek için kullanılabilir:

xml dizinler hakkında bilgi alma

xml dizin girişlerini Katalog görünümü, sys.indexes dizin "türü" ile görüntülenir 3. Ad sütununda xml dizin adını içerir.

xml dizinler ayrıca katalog görünümünde kaydedilir kullanınsys.xml_indexesKatalog. Bu sys.indexes tüm sütunları ve xml dizinler için yararlı olan bazı özel olanlar içerir. Birincil xml dizin sütun, secondary_type, null değeri gösterir; değerler 'p', 'r' ve 'v' YOL, özelliği ve değeri ikincil xml dizinler sırasıyla standı.

xml dizinler boşluk kullanımı-ebilmek bulunmak içinde tablo değerli işlev desteklenirsys.dm_db_index_physical_stats. İşgal, disk sayfaların ortalama satır boyutu bayt sayısı ve kayıt sayısı gibi bilgileri bütün dizin türleri için sağladığı... Bu da xml dizinleri içerir. Bu bilgiler, her veritabanı bölüm için kullanılabilir. xml dizinler aynı bölümleme şemasını ve temel tablo bölümleme işlevini kullanın.

Ayrıca bkz.

Başvuru

sys.dm_db_index_physical_stats (Transact-sql)

Kavramlar

DEL - Implementing XML in SQL Server