【问题标题】: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


    【解决方案1】:

    创建Path 类型的Secondary XML Index 可能会加快您的速度。

    【讨论】:

      【解决方案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)
      

      这应该会使查询速度更快。

      【讨论】:

        猜你喜欢
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        • 2013-08-18
        • 2012-10-18
        相关资源
        最近更新 更多