Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Долгий поиск по xml.exist()  [new]
Zioma
Member

Откуда: Украина, Киев
Сообщений: 361
SQL Server 2005
В таблице больше 1 млн. записей.
В условии запроса используется структура "and сXML.exist('/Env') = 1".
Запрос выполняется очеь долго.

Можно как-то ускорить поиск по xml ?
12 июл 13, 12:02    [14556860]     Ответить | Цитировать Сообщить модератору
 Re: Долгий поиск по xml.exist()  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Zioma
SQL Server 2005
В таблице больше 1 млн. записей.
В условии запроса используется структура "and сXML.exist('/Env') = 1".
Запрос выполняется очеь долго.

Можно как-то ускорить поиск по xml ?

а индекс по xml полю имеется?
тынц
12 июл 13, 12:05    [14556886]     Ответить | Цитировать Сообщить модератору
 Re: Долгий поиск по xml.exist()  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Zioma,

1. Можно проиндексировать, как советовали.
2. Я замечал, что в 2005 метод exist() очень медленный, можно попробовать как-нибудь переписать. Ну не знаю, допустим:
cross apply cXML.nodes('/Env[1]') env(c)
Смысл тот же (нода должна существовать, первой же достаточно), но план будет другой, скорее всего.
12 июл 13, 12:11    [14556934]     Ответить | Цитировать Сообщить модератору
 Re: Долгий поиск по xml.exist()  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Zioma,

Но вообще-то, для миллиона записей XML-индексы надо делать в любом случае. Ну или менять схему таблицы, чтобы этот поисковый атрибут был реляционным, а не XML-ным.
12 июл 13, 12:13    [14556959]     Ответить | Цитировать Сообщить модератору
 Re: Долгий поиск по xml.exist()  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ennor Tiegael
Ну или менять схему таблицы, чтобы этот поисковый атрибут был реляционным, а не XML-ным.
+100500
Это должно быть первым предложением, и вторым.
Если уже дошло до таких запросов - то это рак на последней стадии. Раньше надо было думать.
Индексы только отсрочку дают от песца.

Хотя бы колонку заведите вычисляемую, PERSISTED и индекс уже на неё можете вешать.
12 июл 13, 16:59    [14559552]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить