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

Откуда: из-за границы
Сообщений: 2113
SQL 2008
имеется примерный XML
и я делаю на него парсер


DECLARE @xdoc xml=N'
<ROOT>
	<ITEM>
		<PARAM>
			<BSNAME>ID</BSNAME>
			<ROWID>2</ROWID>
		</PARAM>
		......
		<PARAM>
			<BSNAME>U1</BSNAME>
			<ROWID>3</ROWID>
		</PARAM>
	.........
	</ITEM>
	...
	<ITEM>....</ITEM>
	....	
</ROOT>'	

SELECT  T.Item.value('(PARAM[BSNAME/text()=''ID'']/ROWID/text())[1]', 'NVARCHAR(50)') ID ,
T.Item.value('(PARAM[BSNAME/text()=''U1'']/ROWID/text())[1]', 'NVARCHAR(50)') U1 
.........
FROM @xdoc.nodes('ROOT/ITEM') AS T(Item)


записей примерно 1500-2000
после 6 минут я просто останавил запрос

вопрос : как можно ускорить обработку?
спасибо
29 мар 15, 11:38    [17446371]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить парсер XML  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
michael R,

openxml
29 мар 15, 11:55    [17446411]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить парсер XML  [new]
pk,
Guest
michael R,

имхо, вам нужно избавиться от XML-условий
В реальном XML есть какой-то уник.идентификатор у ITEM ?
Типа такого
	<ITEM pk="1" >
		<PARAM>
			<BSNAME>ID</BSNAME>
			<ROWID>2</ROWID>
		</PARAM>

		<PARAM>
			<BSNAME>U1</BSNAME>
			<ROWID>3</ROWID>
		</PARAM>
	</ITEM>

что бы можно было на pivot переделать ?
select pk, [ID], [U1]
from
	(
	select 
		 T.Item.value('../@pk', 'NVARCHAR(50)')			as pk
		,T.Item.value('(BSNAME/text())[1]', 'NVARCHAR(50)')	as BSNAME
		,T.Item.value('(ROWID/text())[1]', 'NVARCHAR(50)')	as ROWID
	FROM @xdoc.nodes('ROOT/ITEM/PARAM') AS T(Item) 
	) a

pivot (max(ROWID) for BSNAME in ([ID], [U1])) as pvt
29 мар 15, 12:10    [17446441]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить парсер XML  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
pk, нет
всё равно тормоза

openxml хорошо
но мне нужен nodes + query

или разбить запрос на два
внесение(query) а потом update( openxml)
но если xml это поля в таблице
можно ли на них включить openxml ?
29 мар 15, 12:40    [17446491]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить парсер XML  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
michael R
pk, нет
всё равно тормоза


логично, поглядите во что разворачиваются nodes/value...


michael R
openxml хорошо


конечно, один раз парсится все.

michael R
но если xml это поля в таблице
можно ли на них включить openxml ?


ну, если обработка одного xml значения колонки вашим методом занимает неприемлемое время, то рассмотрите курсор, в котором будете использовать sp_xml_preparedocument/openxml/sp_xml_removedocument. всяко быстрее будет.
29 мар 15, 12:48    [17446509]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить парсер XML  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
скомбинировал openxml и query
через подзапрос
намного быстрее
29 мар 15, 13:54    [17446627]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить