Sql Server Xml Столбец производительность запросов? - PullRequest
2 голосов
/ 26 февраля 2011

Я пытаюсь запросить столбец XML на сервере SQL.Я создал первичный индекс для столбца и запросил его, используя:

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

В таблице с 60 000 записей этот запрос занимает около 100 мс на моей локальной машине разработчика.Можно ли как-то оптимизировать это, чтобы повысить производительность запроса?

Ответы [ 2 ]

1 голос
/ 26 февраля 2011

Вы можете оптимизировать для быстрого времени запроса с вычисляемым столбцом. Вычисляемый столбец не может напрямую использовать функции 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)

Это должно сделать запрос намного быстрее.

0 голосов
/ 27 февраля 2011

Создание вторичного XML-индекса типа Path может ускорить процесс.

...