Должен ли я использовать SqlBulkCopy или хранимую процедуру для импорта данных - PullRequest
0 голосов
/ 23 января 2012

У меня есть файл журнала, который имеет размер 248 МБ и может расширяться до ГБ. Таким образом, вы можете представить, сколько строк может быть. Мне нужно импортировать все строки в таблицу в базе данных SQL Server. Для этого я сначала создаю DataTable и добавляю все строки в файле журнала в этот DataTable как новые строки. Это происходит довольно быстро. Более миллиона записей добавляются в таблицу примерно за 30 секунд. После заполнения таблицы строками я импортирую записи в DataTable в базу данных, используя хранимую процедуру. Однако этот этап выполняется очень интенсивно. Теперь мне интересно, должен ли я вместо этого использовать метод SqlBulkCopy WriteToServer или мне следует придерживаться этого способа? Если SqlBulkCopy - лучший выбор, тогда я должен использовать версию DataTable или IDataReader. Заранее спасибо.

1 Ответ

3 голосов
/ 23 января 2012

Я бы пошел с SqlBulkCopy для импорта данных любого реального объема, подобного этому.Разница в производительности и SqlDataAdapter может быть большой.например, я в блоге в качестве сравнения производительности для импорта строк по 100 КБ:

SqlBulkCopy: 1,5885 сSqlDataAdapter: 25.0729s

Вы можете получить еще большую пропускную способность, если использовать опцию TableLock с SqlBulkCopy, которая в моем тесте снизила импорт до 0,8229 с.

Стоит также отметить, что сSqlBulkCopy, вы можете иметь несколько экземпляров массовой загрузки сегмента данных в одну и ту же таблицу назначения параллельно, не конфликтуя друг с другом.Извиняюсь за другую внешнюю ссылку , но я думаю, что это актуально.Речь идет о загрузке в таблицу кучи, без индексов, для оптимальной производительности, что, возможно, не подходит для вашего текущего сценария, но определенно стоит знать.

...