XML 資料類型資料行中的索引

XML 索引可建立在 xml 資料類型資料行上。它們會在資料行中檢索整個 XML 執行個體的所有標記、值和路徑,並提高查詢效能。在下列情況下,您的應用程式可從 XML 索引獲益:

  • 在您的工作負載中,經常會查詢 XML 資料行。必須將資料修改期間的 XML 索引維護成本納入考量。

  • 您的 XML 值相對較大,而所擷取的部份相對較小。建立索引可避免在執行階段剖析整份資料,並有助於索引查閱,增進查詢處理的效率。

XML 索引可分成下列類別:

  • 主要 XML 索引

  • 次要 XML 索引

在 xml 類型資料行上的第一個索引必須是主要的 XML 索引。使用主要 XML 索引時,可支援下列次要索引類型:PATH、VALUE 及 PROPERTY。視查詢類型而定,這些次要索引可協助改善查詢效能。

[!附註]

除非您已正確設定資料庫選項來搭配 xml 資料類型一起運作,否則無法建立或修改 XML 索引。如需詳細資訊,請參閱<XML 資料行上的全文檢索索引>。

XML 執行個體是以大型二進位物件 (BLOB) 儲存在 xml 類型資料行中。這些 XML 執行個體可以是大型的,而且所儲存之 xml 資料類型執行個體的二進位表示法最多可達 2 GB。如果沒有索引,這些二進位大型物件就會在執行階段切割,以便評估查詢。這項切割作業可能會很費時。例如,請考慮下列查詢:

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

為了選取符合 WHERE 子句中條件的 XML 執行個體,在執行階段會切割 Production.ProductModel 資料表之每個資料列中的 XML 二進位大型物件 (BLOB)。然後,便評估 exist() 方法中的運算式 (/PD:ProductDescription/@ProductModelID[.="19"])。此執行階段的切割可能會非常費時,端視資料行中所儲存的執行個體之大小與數目而定。

如果查詢 XML 二進位大型物件 (BLOB) 常在應用程式環境中發生,它將可協助索引 xml 類型的資料行。不過,在資料修改期間有維護索引的相關成本。

本章節內容

主題

描述

主要 XML 索引

描述主要 XML 索引和它的資料列。

次要 XML 索引

描述三種類型的次要 XML 索引。

建立 XML 索引

描述如何建立主要和次要 XML 索引。

修改 XML 索引

描述如何使用 ALTER INDEX 陳述式來修改 XML 索引。

卸除 XML 索引

描述如何使用 DROP INDEX 陳述式來卸除索引。

XML 資料行上的全文檢索索引

描述如何在 XML 資料行上建立全文檢索索引。