2009-11-09 6 views
9

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

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

ответ

6

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

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

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

1

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

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

0

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

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

From BOL