Udostępnij za pośrednictwem


Indeksów pomocniczych XML

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

  • ŚCIEŻKA pomocniczy XML indeksu

  • WARTOŚĆ pomocniczy XML indeksu

  • Właściwość pomocniczy XML indeksu

Wskazówki dotyczące tworzenia jednego lub kilku indeksów pomocniczych są następujące:

  • Jeśli obciążenie sieci używa wyrażenia ścieżki znacząco na kolumnach XML, indeks XML pomocniczy ŚCIEŻKA prawdopodobnie przyspieszyć operacje są przeprowadzane.Najczęściej przypadek jest wykorzystanie exist() metoda XML kolumn w klauzula WHERE języka Transact-SQL.

  • Jeśli Twój obciążenia pobiera wiele wartości z poszczególnych XML wystąpienies przy użyciu wyrażeń ścieżka, klastrowanie ścieżka w każdym pliku XML wystąpienie we właściwości indeks może być przydatne.W tym scenariuszu zazwyczaj występuje w sytuacji worek właściwość, gdy pobierane są właściwość obiektu i jego klucz podstawowy wartość jest znana.

  • Obciążenie sieci obejmuje wyszukiwanie wartości w instancji XML nie znając nazw element lub atrybut, zawierających te wartości, można utworzyć wartość indeksu.Zwykle występuje to wyszukiwań osie podrzędne, takie jak //author [nazwa ostatniego = "Howard"], gdzie <autora> elementy mogą występować w dowolnym poziom hierarchii.Występuje także w kwerendach symboli wieloznacznych, takich jak /book [@ * = "Nowa"], gdzie szuka kwerendy <książki> elementów, które mają niektóre atrybut o wartości "powieść".

ŚCIEŻKA pomocniczy XML indeksu

Kwerend ogólnie wyrażenia ścieżka na określony xml kolumny Typ indeksu pomocnicze ścieżka można przyspieszyć wyszukiwanie.Jak opisano wcześniej w tym temacie, indeks podstawowy jest pomocne, gdy masz kwerend, które określają exist() metoda w klauzula WHERE.Dodanie indeksu pomocnicze ścieżki może również zwiększyć wydajność wyszukiwania w takich kwerendach.

Chociaż indeksu głównego XML pozwala uniknąć konieczności shred XML duże obiekty binarne przy uruchomieniu czas, mogą nie zapewniać najlepszą wydajność kwerend oparte na wyrażeniach ścieżka.Ponieważ wszystkie wiersze z indeksu głównego XML odpowiadającej XML duży obiekt binarny są przeszukiwane sekwencyjnie dla dużych wystąpień XML, kolejne wyszukiwanie może być powolne.W takim przypadek posiadające pomocnicze indeksu, zbudowany na ścieżka wartości i wartości indeksu głównego węzła może znacznie przyspieszyć indeks wyszukiwania.W indeksie pomocnicze ścieżka ścieżka i węzeł wartości są kolumny klucz, umożliwiające więcej efektywne dąży do ścieżka wyszukiwania.optymalizator kwerendy może używać indeksu ścieżki wyrażeń takich jak pokazano poniżej:

  • /root/Location której określona jest tylko ścieżka

LUB

  • /root/Location/@LocationID[.="10"]gdy określona ścieżka i wartość węzła.

Następujące kwerendy pokazuje, gdzie indeksu ŚCIEŻKA jest przydatne:

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 "19" w exist() metoda odpowiadają polom klucz indeksu ścieżka.Umożliwia to bezpośrednie poszukiwanie ścieżka indeksu i zapewnia lepszą wydajność wyszukiwania niż kolejne wyszukiwanie wartości indeksu głównego ścieżka.

WARTOŚĆ pomocniczy XML indeksu

Jeśli na przykład są oparte, wartości kwerendy /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 klucz wartość indeksu są (wartość węzła i ścieżka) podstawowego indeksu XML.Jeśli obciążenie sieci obejmuje badanie wartości z wystąpień XML nie znając element lub atrybut nazwy, które zawierają wartości, indeks wartość może być użyteczne.Na przykład następujące wyrażenie będzie korzystać z posiadające wartość index:

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

  • /book[@* = "someValue"]Jeżeli kwerenda wyszukuje <book> element, dla którego niektóre atrybut o wartości "someValue".

Następujące kwerendy zwraca BusinessEntityID z Person tabela.The WHERE clause specifies a filter that looks for values in the AdditionalContactInfoxml type column.Działalności podmiotu identyfikatory zwracane są tylko wtedy, gdy odpowiednie dodatkowe informacje kontaktowe XML duży obiekt binarny zawiera numer telefonu określonych.Ponieważ <telephoneNumber> elementu mogą występować w dowolnym miejscu XML, wyrażenie ścieżka Określa potomne 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 BusinessEntityID 
FROM   Person.Person
WHERE  AdditionalContactInfo.exist('//ACT:telephoneNumber/ACT:number[.="111-111-1111"]') = 1

W tej sytuacji wyszukiwania wartość dla <number> jest znany, ale może wydawać gdziekolwiek w pliku XML wystąpienie jako element podrzędność <telephoneNumber> elementu.Tego rodzaju kwerendę mogą korzystać z indeksu wyszukiwania, na podstawie określonych wartości.

Właściwość Index pomocniczy

Kwerendy pobierające jedną lub więcej wartości z poszczególnych wystąpień XML mogą korzystać z indeksu właściwości.Ten scenariusz występuje podczas pobierania właściwości obiektów za pomocą value() metoda xml typu i kiedy klucz podstawowy wartość obiektu jest znany.

Indeks właściwości jest zbudowana na kolumny (wartość klucza podstawowego, ścieżkę 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 kwerenda pobiera ProductModelID i ProductModelName przy użyciu wartości atrybut value() metoda.Zamiast indeksu głównego XML lub innych indeksów pomocniczych XML, indeks właściwości może zapewnić 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.Następujące Transact-SQL instrukcji DDL służą do tworzenia i zarządzania indeksami XML:

Zobacz także

Koncepcje