Выполнение нескольких операторов вставки, что является лучшим способом? - PullRequest
0 голосов
/ 14 июня 2009

У меня есть программа, в которой мне нужно запустить несколько операторов вставки (динамически генерируемых) для таблицы MS SQL. Прямо сейчас я делаю (псевдокод):

Loop
Generate Insert Statement String
SQLCommand.Text = Generated Insert Statement String
SQLCommand.Execute().
End Loop

Close Connection

Лучше ли с точки зрения производительности просто создать одну большую строку вставок, разделенных точками с запятой. И запустить только один оператор SQLCommand.Execute ()? Или это не имеет значения?

Спасибо!

Ответы [ 6 ]

3 голосов
/ 14 июня 2009

Вам нужно начать транзакцию, прежде чем начать вставку. Затем, когда вы отправите все свои вставки на сервер и закончите цикл, вы должны выполнить коммит. Это сэкономит вам много записей в базе данных!

Подробнее здесь: http://msdn.microsoft.com/en-us/library/5ha4240h.aspx

3 голосов
/ 14 июня 2009

Вы можете найти эту технику полезной. Это значительно сокращает количество обработанных заявлений.

1 голос
/ 14 июня 2009

Если у вас есть выбор и возможность сделать это на этом этапе, вы можете перейти на SQL Server 2008. У него много дополнительных преимуществ, включая дополнение к T-SQL для выполнения нескольких вставок в одном операторе.

0 голосов
/ 14 июня 2009

Зависит от того, сколько ваш кратный. Но вам также стоит взглянуть на Sql Bulk Copy - очень быстро, очень удобно.

Марк

0 голосов
/ 14 июня 2009

На Postgres вы бы использовали COPY, что позволяет выполнять массовые вставки в CSV-подобном формате. Не знаю, есть ли в sqlserver что-то похожее.

Другой способ - использовать сохраненную процедуру и просто передать длинный список данных в какой-нибудь внутренний цикл вставки.

0 голосов
/ 14 июня 2009

их будет намного быстрее, иначе серверу sql придется посмотреть планы выполнения и т. Д. В зависимости от того, насколько велик цикл и операторы, я мог бы в итоге отправлять N записей одновременно, и затем позволяя этому вернуться, просто чтобы дать себе передышку. другая вещь, которую вы, возможно, захотите рассмотреть (я подхожу к этому, как будто это «выбрасывающий код», [единовременно]) - это просто массовая загрузка. SSIS также вариант ...

...