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 T go CREATE 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 type SELECT * FROM sys.xml_indexes where object_id = object_id('T') AND name='PIdx_T_XmlCol' —- Drop the index DROP INDEX PIdx_T_XmlCol ON T |