Aracılığıyla paylaş


İkincil xml dizinler

Arama performansını artırmak için ikincil xml dizinler oluşturabilirsiniz.İkincil dizin oluşturmadan önce ilk birincil xml dizinin varolması gerekir.Bu türler şunlardır:

  • path ikincil xml dizini

  • DEĞER ikincil xml dizini

  • ÖZELLİK 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 xml sütun üzerinde önemli ölçüde kullanıyorsa, yükünüzü hızlandırmak path ikincil xml dizini olasıdır.En sık karşılaşılan durum kullanımının exist() yöntem, Transact-sql where yan tümce tümce tümcesinde xml sütun üzerinde.

  • İş yükünü birden çok değer tek tek XML'den alırsa, örneks her xml içinde yolları kümeleme yol ifadeler kullanarak örnek dizin özelliği yararlı olabilir.Bu senaryo tipik bir özellik bag senaryoda nesnenin özelliklerini getirilen ve bilinen bir birincil anahtar değeri oluşur.

  • Bu değerler içeren öğe veya öznitelik adları bilmeden xml örnekleri içindeki değerleri sorgulama yükünüzü gerektiriyorsa, değer dizini oluşturmak isteyebilirsiniz.Genellikle //author gibi alt eksen aramaları ile böyle [Soyadı "Howard" =], nerede <Yazar> öğeleri tüm meydana gelebilir düzey hiyerarşisi.De /book gibi joker sorgularda oluşur [@ * "novel" =], sorgu arar burada <kitap> bazı öğeleri öznitelik değeri "Romanım".

path ikincil xml dizini

Sorgularınızı genellikle üzerinde yol ifadeler belirtirseniz, xml türü sütunlarındaki yolu ikincil dizin hızlandırmak mümkün olabilirarama. Belirtme sorgu varsa, bu konunun önceki kısımlarında açıklandığı gibi birincil dizin yararlıdır exist() where yan tümce tümce tümcesinde yöntem.path ikincil dizin eklerseniz, bu tür sorgular'de arama performansı da artırabilir.

Birincil xml dizin xml ikili büyük nesneler çalışma sırasında shred gerek kalmadan önler, ancak saat, yol ifadelerini temel sorgular için en iyi performansını sağlamayabilir.Bir xml ikili büyük nesne için karşılık gelen birincil xml dizin içindeki tüm satırları büyük xml örnekleri için sırayla aranır, sıralı arama yavaş olabilir.Bu durum, önemli yol değerlerini ve düğümün birincil dizin üzerinde oluşturulmuş ikincil bir dizine sahip ölçüde hızlandırabilir dizin arama.İkincil dizin yolu yol ve düğüm için daha fazla yollarını ararken, verimli yararlanılabileceğini izin anahtar sütunları değerlerdir.sorgu iyileştiricisi Yolu dizin olanlar aşağıdaki gösterildiği gibi ifadeler için kullanabilir:

  • /root/Location bir yol belirtmek

OR

  • /root/Location/@LocationID[.="10"]Burada hem yol 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

Query'de, yol ifade /PD:ProductDescription/@ProductModelID ve değer "19" , exist() yöntem karşılık için anahtar alanlarını yolu dizin.Böylece doğrudan yol dizin içinde arama ve sıralı arama için birincil dizin yol değerleri arama daha iyi performans sağlar.

DEĞER ikincil xml dizini

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.

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

  • //author[LastName="someName"]Burada bildiğiniz değeri <LastName> öğesi, ancak <author> üst herhangi bir yerde meydana gelebilir.

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

Aşağıdaki sorgu döndürür BusinessEntityID dan Person tablo.The WHERE clause specifies a filter that looks for values in the AdditionalContactInfoxml type column.Yalnızca belirli telefon numarası ilgili ek iletişim bilgilerini xml ikili büyük nesne içeriyorsa, iş varlık kimliği döner.Çünkü <telephoneNumber> öğesi herhangi bir XML yol ifade belirler anahtarla-veya-self 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 BusinessEntityID 
FROM   Person.Person
WHERE  AdditionalContactInfo.exist('//ACT:telephoneNumber/ACT:number[.="111-111-1111"]') = 1

Bu durumda, arama değeri için <number> bilinen, ancak xml içinde herhangi bir yerde görünebilir örnek alt öğesi olarak <telephoneNumber> öğesi.Bu tür sorgunun belirli bir değere göre bir dizin arama dan fayda sağlayabilir.

İkincil dizin özelliği

Bir veya daha fazla değer xml örneklerini tek tek almak sorguları özelliği dizinden fayda sağlayabilir.Bu senaryoyu kullanarak nesne özelliklerini almak oluşur value() yöntem xml türü ve nesnenin birincil anahtar değeri olduğunda bilinen.

ÖZELLİK dizini pk birincil anahtar olduğu birincil xml dizin sütunları (BA, yol ve düğüm değeri) yerleşik olarak bulunan temel tablo.

Örneğin, bir ürün modeli için 19, aşağıdaki sorgu alır ProductModelID ve ProductModelName kullanarak öznitelik deðerlerini value() yöntem.ÖZELLİK dizini birincil xml dizin veya diğer ikincil xml dizinler yerine daha hızlı bir çalıştırma 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ğıdaki Transact-SQL ddl deyimleri oluşturmak ve xml dizinleri yönetmek için kullanılabilir:

Ayrıca bkz.

Kavramlar