Какова наиболее эффективная / лучшая практика для Upsert 5000+ строк без слияния в SQL Server? - PullRequest
5 голосов
/ 17 мая 2011

У меня есть веб-приложение, которое получает около 50 обращений в секунду, и при каждом обращении я сохраняю около 10 записей в центральной базе данных SQL Server.Примерно раз в 3 секунды я добавляю более 5000 строк для одного входящего соединения.

В настоящее время у меня есть хранимая процедура, которая принимает XML в качестве параметра.Я делаю INSERT в свою основную таблицу из своего XML, где поле строки не совпадает, затем обновляю всю таблицу со значениями из моего XML.

Операция не медленная, но я действительнохотел бы знать лучший способ сделать это.Я работаю на SQL Server 2005, поэтому у меня нет операции MERGE.

1 Ответ

6 голосов
/ 17 мая 2011

Я бы сначала сделал ОБНОВЛЕНИЕ, иначе вы обновите только что вставленные строки

SELECT .. INTO #temp FROM (shredXML)

BEGIN TRAN

UPDATE ... FROM WHERE (matches using #temp)

INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS

COMMIT

Я бы также рассмотрел вопрос об изменении XML-таблицы во временную и использования SQLBulkCopy.Мы обнаружили, что это более эффективно, чем синтаксический анализ XML, как правило, для нескольких сотен строк.Если вы не можете изменить это, то сначала вы разбиваете XML во временную таблицу?

...