В моем приложении я делаю многострочные вставки, когда могу, просто потому, что это уменьшает количество циклов между БД и приложением.
Однако мне было любопытно, есть ли другие преимущества? Например, если несколько строк вставляются одновременно, как это:
insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
против:
insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
и у таблицы есть индекс, индекс рассчитывается один раз в первом случае и дважды во втором случае? Или это всегда один раз за вставку? Предположим, что оба запроса находятся в одной транзакции.
Я использую PostgreSQL.
postgresql
index
optimization
cdmckay
источник
источник
Ответы:
Я думаю, что @a_horse_with_no_name правильно о том, что индекс обновляется один раз для каждого оператора, потому что, если оператор не завершил свое выполнение, данные не будут видны, так как он находится в транзакции. И определение утверждения включает в себя наличие нескольких значений
И accoriding к документации здесь создание индекса / обновление работает более эффективно , с партиями , чем отдельные заявления.
Есть также хорошая статья Питера Маниса о производительности различных методов вставки, которую я могу порекомендовать.
Следует также помнить
FILLFACTOR
о индексе, так как он влияет на производительность, как описывает Фабьен Коэльо .источник
Я не верю, что в настоящее время существуют какие-либо различия в оптимизации в области поддержания индекса в этом отношении.
В дополнение к нагрузке на сеть, другие преимущества оператора с несколькими значениями заключаются в разборе, блокировке и т. Д. (Несмотря на то, что блокировка таблицы
tbl
берется первым оператором вставки и затем поддерживается в течение всей транзакции, каждая вставка оператор еще должен проверить, что блокировка удерживается, и эта проверка не бесплатна)источник