Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XML очень медленный поиск элементов с индексом >1  [new]
unno
Member

Откуда:
Сообщений: 122
Есть некий XML с повторяющимися тегами
Скрипт на 1000 записей отрабатывает мгновенно в случае обращения только к первому индексу
При попытке выборки элементов с индексом 2 скрипт выполняется с 100 раз дольше
Как это можно побороть?
declare @xml XML,@str varchar(max)
select			@str    = '<DATA>'
select top 1000 @str=@str+'<FLIGHT ID="1"><ROUTE NAPR="a"/><ROUTE NAPR="b"/></FLIGHT>' from sysobjects
set				@str=@str+'</DATA>'
set @xml=@str

SELECT
	ID =					nullif(c.value('@ID', 'INT' ),''),  
	ROUTE1 =				nullif(c.value('(ROUTE[1]/@NAPR)', 'varchar(50)' ),'')
	--,ROUTE2 =				nullif(c.value('(ROUTE[2]/@NAPR)', 'varchar(50)' ),'') 			
FROM @xml.nodes('/DATA/FLIGHT') t(c)
6 окт 19, 11:40    [21987559]     Ответить | Цитировать Сообщить модератору
 Re: XML очень медленный поиск элементов с индексом >1  [new]
invm
Member

Откуда: Москва
Сообщений: 8797
SELECT
	ID =					nullif(t.c.value('@ID', 'INT' ),''),  
	ROUTE1 =				nullif(a.n.value('@NAPR', 'varchar(50)' ),'')
	,ROUTE2 =				nullif(b.n.value('@NAPR', 'varchar(50)' ),'') 			
FROM @xml.nodes('/DATA/FLIGHT') t(c) cross apply
t.c.nodes('ROUTE[1]') a(n) cross apply
t.c.nodes('ROUTE[2]') b(n);
6 окт 19, 11:58    [21987565]     Ответить | Цитировать Сообщить модератору
 Re: XML очень медленный поиск элементов с индексом >1  [new]
unno
Member

Откуда:
Сообщений: 122
спасибо, работает
cross заменил на outer, теги не всегда заданы
А чем вызвано такое резкое замедление при прямом обращении в XPATH?
6 окт 19, 12:18    [21987576]     Ответить | Цитировать Сообщить модератору
 Re: XML очень медленный поиск элементов с индексом >1  [new]
invm
Member

Откуда: Москва
Сообщений: 8797
unno
А чем вызвано такое резкое замедление при прямом обращении в XPATH?
Особенности реализации.
На 2017-ом замедлений нет.
6 окт 19, 12:33    [21987580]     Ответить | Цитировать Сообщить модератору
 Re: XML очень медленный поиск элементов с индексом >1  [new]
uaggster
Member

Откуда:
Сообщений: 715
А Option (optimize for UNKNOWN) без переписывания запроса - не прокатит?
Была какая-то долгоиграющая бага, подобным образом лечилась.
7 окт 19, 10:36    [21987987]     Ответить | Цитировать Сообщить модератору
 Re: XML очень медленный поиск элементов с индексом >1  [new]
unno
Member

Откуда:
Сообщений: 122
это опция помогает только с неправильным кешем плана
тут она не играет
7 окт 19, 22:11    [21988897]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить