Запрос SQL для получения значений узлов XML из столбца nvarchar очень медленный - PullRequest
0 голосов
/ 20 октября 2011

У меня есть одна таблица с именем tblAdmissions, один столбец в этой таблице называется "ProgramInformation".Этот столбец содержит строку XML как

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="1">

  <COURSE>reference_project</COURSE>

  <FEE>true</FEE>

</row>

<row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" num="2">
  <COURSE>RoomID</COURSE>
  <FEE>99</FEE>

</row>

Я использую этот запрос, чтобы получить значения из этих столбцов, используя перекрестное применение, и это очень медленно.

С vDynamic AS (Выбрать

            xmlProgramInformation = CAST(ProgramInformation AS XML)
        FROM 
            tblAdmission

        )

SELECT 

  t.p.query('COURSE' ).value('.', 'varchar(max)') AS Decipline, 
  t.p.query('FEE' ).value('.', 'varchar(max)') AS CourseFee 

FROM 
  vDynamic 
  CROSS apply xmlProgramInformation.nodes('/DOCUMENT/ROWS/row') AS t(p)

Есть ли какой-либо другой способ, чтобы мой запрос мог выполняться быстро.

Спасибо

1 Ответ

0 голосов
/ 20 октября 2011

Некоторые вещи, которые вы можете попробовать, начиная от самых простых для реализации до самых сложных:

  1. Если все ваши данные в формате XML, измените nvarchar на столбец XML. Я относительно уверен, что это не окажет заметного влияния на вашу производительность, но это основа для следующих шагов.

  2. Реализация индекса XML. Проверьте Книгу OnLine для деталей

  3. Если атрибуты, которые вы запрашиваете, являются фиксированными, то вы можете пойти дальше и измельчить их в фиксированный формат таблицы. SQL Server предпочитает SQL; XML и XQuery должны использоваться для специальных исследований и / или преобразования.

...