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 索引

说明如何使用 ALTER INDEX 语句修改 XML 索引。

删除 XML 索引

说明如何使用 DROP INDEX 语句删除索引。

XML 列的全文索引

说明如何对 XML 列创建全文索引。