2

我正在尝试在 sql server 中查询一个 xml 列。我在列上创建了一个主索引并使用以下方法查询它:

SELECT *
FROM MyTable
where  Doc.exist('/xml/root/propertyx/text()[. = "something"]') = 1

在包含 60 000 个条目的表中,此查询在我的本地开发机器上需要大约 100 毫秒。是否可以以某种方式对其进行优化以提高查询的性能?

4

2 回答 2

1

您可以使用计算列优化快速查询时间。计算列不能直接使用 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)

这应该使查询更快。

于 2011-02-26T09:36:29.233 回答
0

创建类型的辅助XML 索引Path可能会加快您的速度。

于 2011-02-26T22:42:23.573 回答