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 类型列创建索引很有用。但是,在数据修改过程中维护索引会带来开销。
本节内容