xml 数据类型列的索引

来源:互联网 发布:格式工厂 mac破解版 编辑:程序博客网 时间:2024/06/17 12:19

XML 实例作为二进制大型对象 (BLOB) 存储在 xml 类型列中。这些 XML 实例可以很大,并且存储的 xml 数据类型实例的二进制表示形式最大可以为 2 GB。如果没有索引,运行时将拆分这些二进制大型对象以计算非常耗时的查询。例如,请看以下查询:

--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 索引时,支持三种类型的辅助索引。这些类型包括 PATH、VALUE 和 PROPERTY。根据查询类型的不同,这些辅助索引可能有助于改善查询性能。

 

来自:

SQL Server 2005 联机丛书 ----xml 数据类型列的索引

 

A. 创建和删除主 XML 索引

在以下示例中,XML 索引是针对 xml 类型列创建的:

 复制代码
DROP TABLE TgoCREATE TABLE T (Col1 INT PRIMARY KEY, XmlCol XML)GO-- Create Primary XML index CREATE PRIMARY XML INDEX PIdx_T_XmlCol ON T(XmlCol)GO-- Verify the index creation. -- Note index type is 3 for xml indexes-- note the type 3 is index on XML typeSELECT *FROM sys.xml_indexeswhere object_id = object_id('T')AND name='PIdx_T_XmlCol' —- Drop the indexDROP INDEX PIdx_T_XmlCol ON T
原创粉丝点击