Самый быстрый способ вставить много записей в базу данных - PullRequest
4 голосов
/ 14 июля 2010

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 14 июля 2010

Оформить SqlBulkCopy .

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

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

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

2 голосов
/ 14 июля 2010

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

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

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

1 голос
/ 14 июля 2010

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

Для получения дополнительной информации посмотрите http://www.sql -server-helper.com / SQL-сервер-2008 / слияния-заявление-с-таблицы-значной-parameters.aspx

0 голосов
/ 14 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...