Как вставить большое количество записей в базу данных за короткое время?


8

Я должен вставить кучу записей ( 500 000 ) в базу данных, используя самый быстрый способ. Я попытался вставить 1700 записей одновременно, но это заняло двадцать минут !! Я использую SQL-SERVER, и C#.

Хотя следующая таблица не будет способствовать технике быстрой вставки, я все равно решу ее связать, чтобы вы лучше поняли количество полей, которые мне нужно вставить (дублируйте их примерно на 500 КБ ).

Поля

Ответы:


12

Есть несколько вариантов. Вот основные из них, которые приходят на ум.

SSIS - службы интеграции с SQL Server: это инструмент ETL для SQL Server, позволяющий перемещать данные практически из любого источника в практически любое место назначения, и это может быть довольно быстрым.

BCP - программа массового копирования: это инструмент командной строки, который поставляется с SQL Server. Это очень хорошо для перемещения текстовых файлов в SQL Server, или вы можете экспортировать в собственный формат из одного SQL Server и импортировать, используя тот же формат в другой SQL Server. BCP также очень быстрый, но более ограниченный, чем SSIS.

INSERT INTO tablename ВЫБРАТЬ список полей ИЗ других таблиц : Предполагается, что вы переходите от одной таблицы SQL к другой на том же сервере. Это самая быстрая, но при 500 тыс. Строк вы смотрите на довольно крупную транзакцию или вынуждены разбивать ее, как вы сказали.

OPENROWSET : это функция SQL Server, которая позволит вам извлекать данные в таблицу из различных форматов. Это также должно быть довольно быстро, но я не работал с этим много.

Общее примечание: ваш первичный ключ - mbr_id. Если это то, что хранится в ваших исходных данных (в отличие от столбца идентификаторов), ваша вставка будет работать НАМНОГО быстрее, если исходные данные будут в порядке mbr_id.


0

Так как вы используете. NET, вы можете передавать данные без вызова внешнего процесса. Вы бы использовали табличные параметры. Смотрите мой ответ на StackOverflow для деталей и ссылки на другой вариант этого метода:

https://stackoverflow.com/a/25815939/577765


0

Чтобы сделать это быстрее (особенно, если это начальная популяция таблицы), посмотрите также и на удаление индексов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.