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

本文介绍在SQL Server中如何通过创建主XML索引及辅助索引来优化XML数据类型的查询性能,减少运行时拆分XML二进制大型对象(BLOB)所带来的开销。
复制代码
2719

被折叠的 条评论
为什么被折叠?



