Ikincil XML dizinleri
Arama performansını artırmak için ikincil XML dizinler oluşturabilirsiniz.Birincil XML dizin, ikinci dizini oluşturmadan önce ilk kez bulunması gerekir.Türleri şunlardır:
yol ikincil XML dizini
XML dizin ikincil değer
ÖZELLİK ikincil XML dizini
Bir veya daha fazla ikincil dizin oluşturmak için bazı yönergeler aşağıda verilmiştir:
İş yükünüzü yol ifadeleri XML sütun üzerinde önemli ölçüde kullanılıyorsa, ikincil XML dizini yol yükünüzü hızlı olasıdır.En yaygın durum kullanılmasıdırexist() yöntem Transact WHERE yan tümcesinde sütunlar XML-SQL.
Her XML örneklerden yol ifadeler kullanarak, birden çok değer yükünüzü alır, yol özellik dizini içindeki her XML örneğinde kümeleme yararlı olabilir.Bu senaryo, nesnenin özelliklerini getirilen ve birincil anahtar değeri bilinen bir özellik bag senaryosunda genellikle oluşur.
İş yükünüzü değerleri içeren öğe veya öznitelik adlarını bilmeden XML örneği içindeki değerleri sorgular içeriyorsa, değer dizini oluşturmak isteyebilirsiniz.İle //author gibi alt eksen aramaları, normalde böyle [son-name = "Howard"]; Burada<Yazar>hiyerarşi. herhangi bir düzeydeki öğeleri oluşabilirDa /book gibi joker sorgularda oluşur [@ * "novel" =] sorgu arar; burada<kitap>bazı özniteliğinin değeri "novel" öğelerini.
yol ikincil XML dizini
Sorgularınızı genellikle belirtir ifadeler yol üzerindexmltür sütunlar, bir PATH ikincil dizin hızlandırmak için olabilir arama.Birincil dizin, sorgu belirten olması yararlı gibi bu konu içinde daha önce açıklananexist() WHERE yan tümce. yöntem Bir yol ikincil dizine eklerseniz, bu tür sorgu'de arama performansı da artırabilir.
Çalışma zamanında XML ikili büyük nesneleri shred gerek birincil XML dizin önler, ancak en iyi performans için yol ifadelerini temel alan sorgular sağlamayabilir.Bir XML ikili büyük nesne için karşılık gelen birincil XML dizin içindeki tüm satırları ardışık olarak büyük XML örnekleri için Aranan sıralı arama yavaş olabilir.Bu durumda, yol değerlerini ve düğüm değerlerini birincil dizin oluşturulmuş bir ikincil dizine sahip önemli ölçüde dizin aramayı hızlandırabilirsiniz.yol ikincil dizin yol ve düğüm daha etkili yollarını ararken arar izin anahtar sütunlarının değerlerdir.Sorgu iyileştirici yol dizin olanlar aşağıdaki gösterildiği gibi ifadeler için kullanabilirsiniz:
- /root/Location yalnızca bir yol belirtmek
OR
- /root/Location/@LocationID[.="10"]burada yol hem de düğüm değeri belirtilmiş.
yol dizin yararlı olduğu aşağıdaki sorguyu 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/@ProductModelIDve değer"19",exist()yöntem karşılık olarak anahtar alanlarına PATH dizini.Böylece doğrudan yol dizinde arama ve birincil dizin yolunu değerleri sıralı arama arama daha iyi performans sağlar.
XML dizin ikincil değer
Sorgu değeri bağlı olarak, örneğin /Root/ProductDescription/@*[. = "Mountain Bike"] or //ProductDescription[@Name = "Mountain Bike"], and the path is not fully specified or it includes a wildcard, you might obtain faster results by building a secondary XML index that is built on node values in the primary XML index.
DEĞER dizin anahtar sütunları (düğüm değerini ve yol) olan birincil XML dizin.İş yükünüzü değerleri içeren öğe veya öznitelik adlarını bilmeden XML örnek değerler için sorgular içeriyorsa, bir değer dizini yararlı olabilir.Örneğin, aşağıdaki ifade bir değer dizini oluşturulmasını yararlanabilirsiniz:
//author[LastName="someName"]değerini bilmek burada<LastName>öğesi, ancak<author>ana herhangi bir yerinde oluşabilir.
/book[@* = "someValue"]sorgu burada arar<book>bazı öznitelik değerine sahip olan öğe"someValue".
Aşağıdaki sorgu verirContactIDgelenContactTablo.The WHERE clause specifies a filter that looks for values in the AdditionalContactInfoxml type column.Yalnızca belirli bir telefon numarasını ilgili kişi ek bilgilerini XML ikili büyük nesne içeriyorsa, ilgili kişi kimliği verilir.İçin<telephoneNumber>öğe görünebilir herhangi bir yerde, XML'de yol ifadesi belirtir alt-veya-eksen.
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<number>verilir, ancak bunu herhangi bir alt öğesi XML örneğinde görüntülenebilir<telephoneNumber>öğe.Bu tür sorgu, belirli bir değere göre bir dizin araması'ndan yararlanabilir.
İkinci özellik dizini
Her XML örneklerden bir veya birden çok alan sorgular bir özellik dizinden yararlanabilir.Kullanarak nesne özelliklerini almak Bu senaryo ortaya çıkar**Value()**xmltürüne ve nesnenin birincil anahtar değeri olduğunda yöntem bilinen.
ÖZELLİK dizini BA temel birincil anahtar olduğu birincil XML dizin sütunları (BA, yol ve düğüm değeri) yerleşik tablo.
Örneğin, ürün modeli için19, aşağıdaki sorgu alırProductModelIDveProductModelNameöznitelik değerleri kullanarakvalue()yöntem.Birincil XML dizin ya da diğer ikincil XML dizinleri kullanmak yerine, daha hızlı bir çalıştırma özellik dizini sağlayabilir.
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
Except for the differences described later in this topic, creating an XML index on anxml type column is similar to creating an index on a non-xml type column.AşağıdakiTransact-SQLDDL ifadelerini oluşturmak ve XML dizinleri yönetmek için kullanılabilir: