У меня есть запрос, где у меня есть 3 числа в структуре XML. Когда я смотрю на план выполнения, он показывает мне программу чтения XML 3 раза.
Программа чтения XML с двумя нижними частями сообщает, что выполнила 200 таймеров и оценивает 900 строк в каждом выполнении.
Мои вопросы
- Почему я вижу несколько читателей XML?
- Есть ли способ переписать SQL на одно использование одного считывателя XML
- Являются ли два основания одним выполнением столько раз, сколько сказано и генерирует 180000 строк?
- Это действительно проблема или это просто плохие оценки из MSSQL
См. План выполнения:
https://www.brentozar.com/pastetheplan/?id=H11aOGclB
Я пытался добавить перекомпиляцию в запрос, но это только ухудшает ситуацию. Я не ожидал, что это сработает.
DECLARE @x xml; SET @x='
<guids>
<guid>1000000075</guid>
<guid>1000000102</guid>
<guid>1000000052</guid>
</guids>';
SELECT T.c.value('.', 'nvarchar(10)') AS result
FROM @x.nodes('/guids/guid') T(c)
Я ожидаю, что в плане выполнения я видел только одного читателя XML.