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 類型的資料行。不過,在資料修改期間有維護索引的相關成本。
本章節內容