Самый быстрый способ вставить много записей в базу данных

Я вставляю запись в базу данных (100,1000, 10.000 и 100.000), используя 2 метода (это таблица без первичного ключа и без индекса)

  • используя для и вставляя один за другим
  • используя хранимую процедуру

Конечно, лучше использовать хранимую процедуру. Мои вопросы: 1) если я использую индекс, операция пойдет быстрее и 2) есть ли другой способ сделать вставку

PS: я использую ibatis в качестве ORM, если это имеет какое-то значение

4 ответа

Решение

Проверьте SqlBulkCopy.

Он предназначен для быстрой вставки больших объемов данных. Я нашел, что это быстрее всего при использовании опции TableLock и установке BatchSize около 10000, но лучше всего протестировать различные сценарии с вашими собственными данными.

Вы также можете найти следующее полезное.

Анализ производительности SQLBulkCopy

Нет, я подозреваю, что если вы используете индекс, он на самом деле будет работать медленнее. Это потому, что он должен обновлять индекс, а также вставлять данные.

Если вы достаточно уверены, что у данных не будет дубликатов ключей, добавьте индекс после того, как вы вставили все строки. Таким образом, он создается один раз, а не добавляется и перебалансируется при каждой вставке.

Это функция СУБД. Я знаю, что это верно для того, который я часто использую (который не является SQLServer).

Я знаю, что это немного не по теме, но обидно, что вы не используете SQL Server 2008, поскольку в этой области произошли значительные улучшения с появлением оператора MERGE и определяемых пользователем типов таблиц (которые позволяют передавать -в "таблице" данных для хранимой процедуры или оператора, чтобы вы могли вставить / обновить много записей за один раз).

Для получения дополнительной информации, посмотрите на http://www.sql-server-helper.com/sql-server-2008/merge-statement-with-table-valued-parameters.aspx

Другие вопросы по тегам