SELECT
*,
( -- Subquery to get associated rows in View2 as XML.
SELECT
*
FROM View2
WHERE
View1_Print.SchedId = View2.SchedId AND
PublishDay BETWEEN StartDate AND EndDate FOR XML PATH('Answer')
) AS Answers
FROM View1_Print
FOR XML PATH('View1'), ROOT('ArrayOfView1');
Приведенный выше SQL правильно извлекает все строки в View1 вместе с XML-представлением связанных строк в View2, чего я и хочу. Проблема в том, что этот запрос выполняется четыре минуты. Каждое представление имеет несколько тысяч строк.
Когда я запускаю обычный запрос с оператором соединения, он выполняется всего за шесть секунд, но я ищу эффективный способ сериализации этого результата в XML. Вот мой запрос без XML, который выполняется за шесть секунд:
SELECT
*
FROM
View1 A
LEFT OUTER JOIN View2 B
ON A.SchedId = B.SchedId AND B.PublishDay BETWEEN A.StartDate AND A.EndDate;
Он должен извлекать точно такой же формат, так почему же мой XML-запрос такой медленный?
for xml
может использовать соединение с вложенным циклом. Можете ли вы опубликовать планы выполнения для двух запросов? - person Gordon Linoff   schedule 01.02.2014