Udostępnij przez


Secondary XML Indexes

Aby zwiększyć wydajność wyszukiwania, można utworzyć pomocniczy indeksów XML.Indeks główny XML najpierw musi znajdować się przed przystąpieniem do tworzenia indeksów pomocniczych.Są to typy:

  • Pomocniczy indeksu XML ścieżka

  • WARTOŚĆ pomocniczy XML indeksu

  • właściwość pomocniczy XML indeksu

Poniżej podano pewne wskazówki dotyczące tworzenia jednego lub kilku indeksów pomocniczych:

  • Jeśli operacje są przeprowadzane znacznie używa wyrażenia ścieżka na podstawie kolumn XML, indeks XML pomocniczy ścieżka jest prawdopodobne przyspieszyć operacje są przeprowadzane.przypadek typowych polega na wykorzystaniu EXIST() metoda XML kolumn w klauzula WHERE języka Transact-SQL.

  • Jeśli operacje są przeprowadzane pobiera wiele wartości z poszczególnych wystąpień XML przy użyciu wyrażenia ścieżka, może być przydatne, klastrowanie ścieżka w każdym wystąpieniu XML w indeksie właściwość.W tym scenariuszu zazwyczaj występuje w przypadku ataku worek właściwość, gdy pobierane właściwość obiektu i jego wartości klucz podstawowy jest znany.

  • Operacje są przeprowadzane wiąże się wyszukiwanie wartości w obrębie wystąpienia XML bez znajomości nazwy elementu lub atrybut, zawierające te wartości, można utworzyć indeksu wartość.Ta sytuacja zazwyczaj występuje wówczas z podrzędnych osi wyszukiwania, takie jak //author [nazwa ostatniego = "Howard „], gdzie <Autor> elementy mogą wystąpić na dowolnym poziomie w hierarchii. Występuje także w kwerendach symboli wieloznacznych, takich jak /book [@ * = "Nowa"], gdzie szuka kwerendy <książki>elementy, które mają niektóre atrybut o wartości "" nowe".

Dodatkowy indeks XML ścieżka

Jeśli kwerendy zazwyczaj określić ścieżka wyrażeń na xml Typ kolumny, indeks pomocniczy ścieżka może być w stanie do przyspieszenia wyszukiwania. Opisane we wcześniejszej części tego tematu, indeks podstawowy jest pomocne w przypadku, gdy masz kwerendy, które określają EXIST() metoda w klauzula WHERE.Dodanie indeksu pomocniczy ścieżka może również zwiększyć wydajność wyszukiwania w tych kwerendach.

Mimo że indeksu głównego XML pozwala uniknąć konieczności Podrasowane duże obiekty binarne XML w czasie wykonywania, mogą nie zapewniać najlepszą wydajność dla kwerend opierających się na ścieżce wyrażeń.Ze względu na to, wszystkie wiersze z indeksu głównego XML odpowiadającej obiektu dużych binarne XML są przeszukiwane sekwencyjnie dla dużych wystąpień XML, kolejne wyszukiwania mogą być powolne.W takim przypadek o pomocniczych indeks oparty na ścieżka wartości i wartości węzła głównego indeksu może znacznie przyspieszyć indeksu wyszukiwania.W indeksie pomocniczy ścieżka ścieżka i węzeł wartości są kolumny klucz umożliwiające więcej efektywne stara się do ścieżka.optymalizator kwerendy może używać indeksu ścieżka wyrażeń, takich jak pokazano poniżej:

  • /root/Location które określą tylko ścieżka

LUB

  • /root/Location/@LocationID[.="10"] gdzie są określone zarówno ścieżka, jak i wartość węzła.

Następujące kwerendy pokazuje, gdzie indeksu ścieżka jest pomocne:

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

W kwerendzie wyrażenie ścieżka /PD:ProductDescription/@ProductModelID i wartości "19" w exist() Metoda odpowiada klucz pola indeksu ścieżka. Umożliwia to bezpośrednie wyszukiwać w indeksie ścieżka i zapewnia lepszą wydajność wyszukiwania niż kolejne wyszukiwanie wartości ścieżka w indeks podstawowy.

WARTOŚĆ dodatkowy indeks XML

Jeśli kwerendy są wartości, na przykład /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.

Kolumny kluczy wartości indeksu są (wartość węzła i ścieżka) z indeksu głównego XML.Jeżeli operacje są przeprowadzane pociąga za sobą kwerendy dla wartości z wystąpień XML bez znajomości nazwy elementu lub atrybut, które zawierają wartości, indeks wartość może być przydatne.Na przykład następujące wyrażenie będą korzystać z o indeksie wartość:

  • //author[LastName="someName"] Jeżeli znasz wartość <LastName> element, ale <author> nadrzędny mogą występować wszędzie.

  • /book[@* = "someValue"] Jeżeli kwerenda wyszukuje <book> element, który ma kilka atrybut o wartości "someValue".

Następująca kwerenda zwraca ContactID z Contact Tabela. The WHERE clause specifies a filter that looks for values in the AdditionalContactInfoxml type column.Kontakt identyfikatory zwracane są tylko wtedy, gdy odpowiednie dodatkowe informacje o kontakcie binarne dużego obiektu XML zawiera numer telefonu określone.Ponieważ <telephoneNumber> Wyrażenie ścieżka pojawiać element może się w dowolnym miejscu w kodzie XML, określa potomkiem lub self oś.

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

W takim przypadku wartość wyszukiwania <number> jest znany, ale go może pojawiać się w dowolnym miejscu w wystąpieniu XML jako element podrzędność <telephoneNumber> element. Tego rodzaju kwerendę mogą korzystać z wyszukiwania indeks na podstawie określonych wartości.

Dodatkowy indeks właściwość

Kwerendy pobierające jedną lub więcej wartości z poszczególnych wystąpień XML mogą korzystać z indeksu właściwość.W tym scenariuszu pojawia się podczas pobierania właściwości obiektów za pomocą Value() Metoda xml Typ, gdy znana jest wartość klucz podstawowy obiektu.

Indeks właściwość jest wbudowana w kolumnach (wartość klucza podstawowego, ścieżka i węzeł) indeksu głównego XML, gdy klucz podstawowy jest kluczem podstawowym tabela bazowa.

Na przykład dla modelu produktu 19, następujące kwerendy pobiera ProductModelID i ProductModelName wartości atrybut za pomocą value() Metoda. Zamiast korzystać z indeksu głównego XML lub innych pomocniczych indeksy XML, indeks właściwość może dostarczyć szybsze wykonywanie.

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.Poniżej Transact-SQL Instrukcje DDL mogą służyć do tworzenia i zarządzania indeksami XML: