Прежде всего позвольте мне сказать, что я работаю на SQL Server 2005, поэтому у меня нет доступа к MERGE
.Удалить All/Bulk Insert
У меня есть таблица с ~ 150 тыс. Строк, которые я ежедневно обновляю из текстового файла. Поскольку строки выпадают из текстового файла, мне нужно удалить их из базы данных, и если они меняются или являются новыми, мне необходимо обновить/вставить соответственно.
После некоторого тестирования я обнаружил, что производительность намного ускоряется, чтобы выполнить полное удаление, а затем объемную вставку из текстового файла, а не читать через строку строки, выполняющую обновление/вставку. Однако недавно я столкнулся с некоторыми сообщениями о том, как имитировать функции MERGE
SQL Server 2008, используя временную таблицу и вывод инструкции UPDATE
.
Меня заинтересовало это, потому что я изучаю, как я могу исключить время в методе Delete/Bulk Insert, когда таблица не имеет строк. Я все еще думаю, что этот метод будет самым быстрым, поэтому я ищу лучший способ решить проблему с пустой таблицей.
Благодаря
Спасибо за советы, я не знал о Truncate и, скорее всего, буду использовать его, но я пытаюсь устранить короткий промежуток времени между удалением и объемной вставкой, когда таблица пуста. Есть идеи? – rpf3
@ rpf3: Попробуйте TRUNCATE. Я думаю, что это устранит большую часть задержки, о которой вы говорите. –
Truncate был определенно быстрее, чем удаление, но для Bulk Insert все равно требуется ~ 9 секунд. Меня попросили выяснить, есть ли способ устранить даже это небольшое количество времени простоя, потому что другие процессы могут попасть в базу данных во время выполнения. – rpf3