Как BULK INSERT работает внутри?

не мог бы кто-нибудь объяснить, как BULK INSERT внутренне работает и почему это намного быстрее, чем обычные операции вставки ?

с уважением, Шишир.

3 ответов


BULK INSERT запускается в процессе работы с Database engine SQL Server и, таким образом, избегает передачи данных через сетевой уровень клиентского API - это делает его быстрее, чем BCP и DTS / SSIS.

кроме того, с BULK INSERT вы можете указать порядок по данным, и если это то же самое, что и PK таблицы, то блокировка происходит на уровне страницы. Запись в журналы транзакций происходит на уровне страницы, а не на уровне строки.

в случае регулярного Вставка, блокировка и запись журнала транзакций находятся на уровне строк. Это делает BULK INSERT быстрее, чем оператор INSERT.


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

тогда, возможно, более интересно, что разработчик DB может (я не знаю, делает ли это какой-либо конкретный поставщик) начать умничать - они могут смотреть на набор записей, которые будут вставлены, а не реорганизация страниц данных для размещения отдельных записей может сделать массовую реорганизацию страниц для новых вставок, точно так же мы можем представить, что перетасовка индексов может быть выполнена более эффективно, если мы знаем, что вставляем набор записей.


внутренне он преобразуется в набор записей OLEDB, а затем загружает таблицу.

Я не думал об этом, но я бы предположил, что это быстрее при запуске на SQL Server, а не на клиенте. Кроме того, вы можете управлять ограничениями, которые вы не можете с обычной INSERT

из BOL