Я новичок в 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)