Почему пакетные вставки быстрее?
По многочисленным причинам, но основными тремя являются следующие:
- Запрос не нужно перерисовывать.
- Значения передаются в одном обратном направлении на сервер
- Команды находятся внутри одной транзакции
Это связано с тем, что накладные расходы на подключение и настройку для вставки одной строки одинаковы для набора строк?
Частично да, см. Выше.
Как работают пакетные обновления?
Это зависит от RDBMS
.
В Oracle
вы можете передать все значения в виде коллекции и использовать эту коллекцию как таблицу в JOIN
.
В PostgreSQL
и MySQL
вы можете использовать следующий синтаксис:
INSERT
INTO mytable
VALUES
(value1),
(value2),
a€¦
Вы также можете подготовить запрос один раз и вызвать его в каком-то цикле. Обычно есть способы сделать это в клиентской библиотеке.
Предполагая, что таблица не имеет ограничений уникальности, вставные инструкции не оказывают никакого влияния на другие вставки в пакете. Но во время пакетных обновлений обновление может изменять состояние таблицы и, следовательно, может повлиять на результат других запросов обновления в пакете.
Да, и вы можете или не можете воспользоваться этим поведением.
Я знаю, что запросы пакетной вставки имеют синтаксис, где у вас есть все значения вставки в одном большом запросе. Как выглядят запросы пакетного обновления?
В Oracle
, вы используете коллекцию в соединении:
MERGE
INTO mytable
USING TABLE(:mycol)
ON a€¦
WHEN MATCHED THEN
UPDATE
SET a€¦
В PostgreSQL
:
UPDATE mytable
SET s.s_start = 1
FROM (
VALUES
(value1),
(value2),
a€¦
) q
WHERE a€¦