Передача XML против передачи определенного пользователем типа

Я работаю над повышением производительности старой хранимой процедуры. В настоящее время он получает XML-параметр одного узла, переданный из другой хранимой процедуры. Затем XML используется в перекрестном применении. Мне интересно, извлекает ли X-Query в CROSS APPY значение построчно или оно анализируется заранее. Было бы меньше накладных расходов для меня, если бы я передал список как UDT вместо XML

Это код, который генерирует XML

SELECT @NewRunBatchProcessSteps = (
    SELECT Tracking.NewPrimaryKey RunBatchProcessStepId
    FROM @RunBatchProcessStep AS RunBatchProcessStep
        INNER JOIN @RunBatchProcessNew Tracking ON RunBatchProcessStep.RunBatchProcessStepId = Tracking.OldPrimaryKey
    FOR XML PATH('RunBatchProcessStep'), ROOT ('RunBatchProcessSteps')
)

Вот как это используется.

SELECT SomeFields
FROM RunBatchProcessStep 
CROSS APPLY @NewRunBatchProcessSteps.nodes('/RunBatchProcessSteps/RunBatchProcessStep') RunBatchProcessStepsXML(ref)
INNER JOIN BatchProcessStep btp ON RunBatchProcessStep.BatchProcessStepId = btp.BatchProcessStepId
INNER JOIN Module m ON m.ModuleCode = btp.ModuleCode
WHERE RunBatchProcessStep.RunBatchProcessStepId = ref.value('RunBatchProcessStepId[1]', 'INT')

Если бы я взял @NewRunBatchProcessSteps и превратил его в UDT с одним столбцом, а затем выполнил бы внутреннее соединение с ним, увидел бы я улучшение производительности?


person Brent Heritier    schedule 08.04.2014    source источник
comment
Вы должны просто попробовать и посмотреть.   -  person RBarryYoung    schedule 08.04.2014
comment
Но в целом да, передача ряда значений в качестве определяемого пользователем табличного типа должна быть более эффективной, чем XML. Но ваш пробег может варьироваться в зависимости от обстоятельств.   -  person RBarryYoung    schedule 08.04.2014
comment
Спасибо. Я работаю над созданием версии, которая работает с UDT. Данные в наших разных средах настолько разные, что я редко получаю один и тот же план выполнения между ними. Так что ваш общий комментарий - это то, что я искал. Я хотел узнать на высоком уровне, стоит ли пытаться. Спасибо!   -  person Brent Heritier    schedule 09.04.2014


Ответы (1)


Он основан на количестве ваших данных. Если вы передаете большее количество данных, вы можете использовать UDT, в противном случае вы можете использовать XML. Поскольку синтаксический анализ XML занимает больше времени, когда вы передаете больше данных no.of. Так что это основано на вашем требовании.

person Community    schedule 19.06.2015