我正在尝试在 sql server 中查询一个 xml 列。我在列上创建了一个主索引并使用以下方法查询它:
SELECT *
FROM MyTable
where Doc.exist('/xml/root/propertyx/text()[. = "something"]') = 1
在包含 60 000 个条目的表中,此查询在我的本地开发机器上需要大约 100 毫秒。是否可以以某种方式对其进行优化以提高查询的性能?
我正在尝试在 sql server 中查询一个 xml 列。我在列上创建了一个主索引并使用以下方法查询它:
SELECT *
FROM MyTable
where Doc.exist('/xml/root/propertyx/text()[. = "something"]') = 1
在包含 60 000 个条目的表中,此查询在我的本地开发机器上需要大约 100 毫秒。是否可以以某种方式对其进行优化以提高查询的性能?
您可以使用计算列优化快速查询时间。计算列不能直接使用 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)
这应该使查询更快。
创建类型的辅助XML 索引Path
可能会加快您的速度。