使用PostgreSQL外部数据包装器插入时,是否批量插入行更有效?



所以,如果我有很多记录我想要插入到一个外表中,我可以这样做(伪代码):

DO
    INSERT INTO my_fdw_table VALUES next_row;
LOOP

或:

INSERT INTO my_fdw_table SELECT all_the_rows;

根据我的直觉,第二种方法似乎更有效,因为所有的数据都是一次性发送的,重复的SQL关键字更少。

然而,我不知道第二种方法是否真的会导致同样多的往返。我也不知道,如果有很多行,第二种方法是否会有达到语句长度限制的风险?

我正在使用postgres 9.3

差异不会很大,因为即使是批量INSERT也会在外部服务器上产生许多单个INSERT,因此在这两种情况下,往返次数是相同的。

如果有一个可测量的差异,我怀疑这是因为客户端或PL/pgSQL代码处理INSERT循环需要一些时间。当然,如果您在自己的事务中运行每个INSERT,或者为INSERT语句使用动态SQL,那么您的速度会因此变慢。

相关内容

  • 没有找到相关文章

最新更新