2010-07-14 2 views
3

Я вставив запись в базе данных (100,1.000, 10.000 и 100.000) с использованием 2 метода (таблица с не первичным ключом и без индекса)быстрый способ вставить множество записей в базе данных

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

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

PS: Я использую Ibatis, как ОРМ, если это делает никакой разницы

+0

Возможный дубликат [Вставить данные в SQL-сервер с максимальной производительностью] (http://stackoverflow.com/questions/2805390/insert-data-into-sql-server-with-best-performance) – Incognito

ответ

5

SqlBulkCopy Отъезд.

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

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

SQLBulkCopy Performance Analysis

2

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

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

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

1

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

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