多行插入与多个单行插入

cdm*_*kay 10 postgresql index optimization

在我的应用程序中,我尽可能地进行多行插入,因为它减少了数据库和应用程序之间的往返次数。

不过,我很好奇,还有其他好处吗?例如,如果像这样一次插入多行:

insert into tbl (c1, c2) values
(v1, v2)
(v3, v4)
Run Code Online (Sandbox Code Playgroud)

相对:

insert into tbl (c1, c2) values (v1, v2)
insert into tbl (c1, c2) values (v3, v4)
Run Code Online (Sandbox Code Playgroud)

并且表有索引,索引是在第一种情况下计算一次,在第二种情况下计算两次吗?还是每次插入总是一次?假设两个查询在同一个事务中。

我正在使用 PostgreSQL。

小智 6

我认为@a_horse_with_no_name 关于每个语句更新一次索引是正确的,因为如果语句尚未完成其执行,则数据将不可见,因为它处于事务中。并且语句的定义包括具有多个值

并且根据此处的文档索引创建/更新在批处理中比单个语句更有效。

Peter Manis还有一篇关于各种 Insert 方法性能的好文章,我可以推荐它。

要记住的另一件事是FILLFACTOR索引的 ,因为它确实对Fabien Coelho 在这里描述的性能有影响。