Медленный XML-запрос / нечетный план выполнения для простого оператора - PullRequest
0 голосов
/ 03 июля 2019

У меня есть запрос, где у меня есть 3 числа в структуре XML. Когда я смотрю на план выполнения, он показывает мне программу чтения XML 3 раза.

Программа чтения XML с двумя нижними частями сообщает, что выполнила 200 таймеров и оценивает 900 строк в каждом выполнении.

Мои вопросы

  1. Почему я вижу несколько читателей XML?
  2. Есть ли способ переписать SQL на одно использование одного считывателя XML
  3. Являются ли два основания одним выполнением столько раз, сколько сказано и генерирует 180000 строк?
  4. Это действительно проблема или это просто плохие оценки из 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...