Рейтинг:-1

SQL — как избежать чтения значения из столбца XML из-за проблем с производительностью

флаг mx

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

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

Здесь - данные - это столбец XML, а приведенный ниже код является частью моей основной хранимой процедуры, только приведенный ниже код имеет проблему с производительностью, а таблица erequest уже проиндексирована.

  ОБЪЯВИТЬ ТАБЛИЦУ @SFD 
  ( 
     етид БОЛЬШОЙ, 
     eСумма ДЕСЯТИЧНОЕ (12, 2), 
     eДата ДАТА
  ) 


ВСТАВЬТЕ В @SFD
ВЫБЕРИТЕ tr.etid,
        tr.edata.value('(EData/Amount)[1]', 'DECIMAL(12, 2)') eAmount,
        tr.edata.value('(EData/DrawDate)[1]','date') eDate
ОТ dbo.erequest тр
ГДЕ tr.accountid = @AccountId 

В приведенном выше запросе следующие строки занимают слишком много времени,

**tr.edata.value('(EData/Amount)[1]', 'DECIMAL(12, 2)') eAmount,
tr.edata.value('(EData/DrawDate)[1]','date') eDate**

Пожалуйста, посоветуйте мне, как мне переписать приведенные выше строки в основном запросе sql, чтобы я мог увидеть улучшение производительности.

Пожалуйста, найдите приведенный ниже запрос для заполнения данных таблицы:

Создать запрос таблицы
(
етид БОЛЬШОЙ,
данные XML,
ID аккаунта INT
)

ВСТАВЬТЕ В erequest (etid, edata, accountid) ЗНАЧЕНИЯ (2145124897,
'<данные>
  <CardHolderName>ABCFDE</CardHolderName>
  <CardNumber>K6011</CardNumber>
  <Сумма>555,17</Сумма>
  <DrawDate>2022-05-18</DrawDate>
  <CurrencyCode>Доллар США</CurrencyCode>
</edata>',10)

ВСТАВЬТЕ В erequest (etid, edata, accountid) ЗНАЧЕНИЯ (2145124897,
'<данные>
  <CardHolderName>ABCFDE</CardHolderName>
  <CardNumber>K6011</CardNumber>
  <Сумма>555,17</Сумма>
  <DrawDate>2022-05-18</DrawDate>
  <CurrencyCode>Доллар США</CurrencyCode>
</edata>', 20)

ВСТАВЬТЕ В erequest (etid, edata, accountid) ЗНАЧЕНИЯ (2145124897,
'<данные>
  <CardHolderName>ABCFDE</CardHolderName>
  <CardNumber>K6011</CardNumber>
  <Сумма>555,17</Сумма>
  <DrawDate>2022-05-18</DrawDate>
  <CurrencyCode>Доллар США</CurrencyCode>
</edata>',30)

ВСТАВЬТЕ В erequest (etid, edata, accountid) ЗНАЧЕНИЯ (2145124897,
'<данные>
  <CardHolderName>ABCFDE</CardHolderName>
  <CardNumber>K6011</CardNumber>
  <Сумма>555,17</Сумма>
  <DrawDate>2022-05-18</DrawDate>
  <CurrencyCode>Доллар США</CurrencyCode>
</edata>',12)

ВСТАВЬТЕ В erequest (etid, edata, accountid) ЗНАЧЕНИЯ (2145124897,
'<данные>
  <CardHolderName>ABCFDE</CardHolderName>
  <CardNumber>K6011</CardNumber>
  <Сумма>555,17</Сумма>
  <DrawDate>2022-05-18</DrawDate>
  <CurrencyCode>Доллар США</CurrencyCode>
</edata>', 16)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.