Простой тест показывает, что ваш заход на посадку 1 занимает меньше времени, чем заход на посадку 2 .Я бы не стал делать никаких выводов, что это всегда так.Это может зависеть от того, как ваш XML структурирован и как вам нужно запрашивать XML.
Хранимые процедуры для тестирования:
create procedure TestXML
@X xml
as
set nocount on
select X.N.value('.', 'varchar(8000)')
from @X.nodes('/root/item') as X(N)
go
create procedure TestOpenXML
@X xml
as
set nocount on
declare @idoc int
exec sp_xml_preparedocument @idoc out, @X
select value
from openxml(@idoc, '/root/item',1)
with (value varchar(8000) '.')
exec sp_xml_removedocument @idoc
Тест:
declare @X xml
set @X =
(
select number as '*'
from master..spt_values
for xml path('item'), root('root'), type
)
set statistics time on
exec TestXML @X
exec TestOpenXML @X
Подход к результатам 1:
SQL Server Execution Times:
CPU time = 63 ms, elapsed time = 70 ms.
Подход к результатам 2:
SQL Server Execution Times:
CPU time = 156 ms, elapsed time = 159 ms.
(протестировано на SQL Server 2005.)