В настоящее время я пытаюсь настроить несколько проблемную хранимую процедуру, и я заметил, что большая часть затрат, связанных с ее запуском, исходит из синтаксического анализа некоторого XML-кода во временной таблице. Вот вопрос SQL:
CREATE TABLE #ChangeSet
(
RemarkTypeID TINYINT NOT NULL PRIMARY KEY,
RemarkText VARCHAR(2500) NOT NULL,
ListingID INT NOT NULL
)
INSERT INTO #ChangeSet
(RemarkTypeID,
RemarkText,
ListingID)
SELECT
T.c.value('@RemarkTypeID[1]','tinyint') AS RemarkTypeID,
T.c.value('@RemarkText[1]','varchar(2500)') AS RemarkText,
@ListingID
FROM @RemarksXml.nodes('/Remarks[1]/Remark') AS T(c)
Кроме того, у вас есть представление о структуре анализируемого XML:
<Remarks>
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211767" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="8" RemarkText="aaaWasher,Dryer,Refriger,Microwav" />
<Remark xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" RemarkID="211768" DateTimeCreated="1991-11-19T10:43:50" DateTimeModified="1992-01-01T10:43:50" RemarkTypeID="3" RemarkText="aaaell Maintained 3Bd 1.5Ba Semi-Detached Home In Cambridge Gardens. Garage W As Converted Into A Nice Family Room The Outside Is Maintence Free. Includes All Appliances,Security System,Storage Shed,Ceiling Fans And New Carpet.This Home Is Very Well Pricded. Seller Will Consider Fha Or Va Along With Conventional Finacing. This Is A Great Buy." />
</Remarks>
Что я могу сделать, чтобы улучшить производительность анализа этих узлов XML и настройки этой временной таблицы?
sql-server
xml
temporary-tables
jdm5310
источник
источник
Ответы:
Вы могли бы попробовать
OPENXML
. Сейчас я обычно не рекомендую,OPENXML
поскольку у него есть ряд известных проблем с памятью (в основном это может занять 1/8 вашего пула буферов в зависимости от размера XML) (!! TODO add link). Однако, как гласит легенда, он быстрее для больших кусков XML, поэтому стоит попробовать в среде dev / test, и если вы знаете проблемы с памятью и получаете производительность, вам решать, что вам больше всего нужно. Что-то вроде этого:Не забывайте всегда звонить
sp_xml_removedocument
. Я предполагаю, что ваш реальный XML намного больше, можете ли вы дать нам представление о том, сколькоRemark
элементов он будет иметь и каков его размер в КБ / МБ. Я вернусь к этому посту позже и настрою тестовую установку для сравнения производительности на основе вашей статистики.ОБНОВЛЕНИЕ: Согласно вашему примеру сценария, ваш XML может содержать не более 256
Remark
элементов с максимальной длиной 2500. Создав некоторый пример XML для соответствия этим критериям и протестировав его, производительность двух методов невелика, и оба финишировать в секунду В этом случае я бы выбрал тип данных XML и методы. Можете ли вы предоставить другую запрашиваемую информацию, пожалуйста?источник
Есть две основные вещи, которые вы можете сделать, чтобы улучшить производительность парсинга xml:
источник