【问题标题】:Sql Server Xml Column query performance?Sql Server Xml 列查询性能?
【发布时间】:2011-07-04 19:18:30
【问题描述】:
我正在尝试在 sql server 中查询一个 xml 列。
我已经在列上创建了一个主索引并使用以下方法查询它:
SELECT *
FROM MyTable
where Doc.exist('/xml/root/propertyx/text()[. = "something"]') = 1
在包含 60 000 个条目的表中,此查询在我的本地开发机器上需要大约 100 毫秒。
是否可以通过某种方式对其进行优化以提高查询性能?
【问题讨论】:
标签:
sql-server
xml-column
【解决方案2】:
您可以使用计算列优化快速查询时间。计算列不能直接使用 XML 函数,所以你必须将它们包装在一个函数中:
go
create function dbo.GetSomethingExists(
@Doc xml)
returns bit
with schemabinding
as begin return (
select @Doc.exist('/xml/root/property/text()[. = "something"]')
) end
go
create table TestTable (
Doc xml,
SomethingExists as dbo.GetSomethingExists(Doc) persisted
)
go
如果你用schemabinding声明函数,你可以在SomethingExists上创建一个索引:
create index IX_TestTable_SomethingExists on TestTable(SomethingExists)
这应该会使查询速度更快。