性能差异“插入选择”vs“选择和循环插入”

时间:2011-08-17 11:11:01

标签: sql postgresql

是否有任何性能优势
INSERT INTO table1( column1) select * from table2;

针对

BEGIN
FOR t2Row IN SELECT * FROM table2 LOOP
   EXECUTE 'INSERT INTO ...'
END LOOP;
END;

在postgresql数据库引擎中非常有趣。我相信第一个查询消耗更多的内存,因为它缓冲整个结果,但第一次查询更快?

1 个答案:

答案 0 :(得分:2)

这里有一个关于这个主题的答案: RBAR vs. Set based programming for SQL

我会说第一种方法比第二种方法快得多,因为它是基于集合的(如marc_s所述)。

此外,第二种方法涉及切换到SQL,然后在循环的每次迭代中再次返回。我不是Postgres用户,但在Oracle中,这将导致单独的上下文切换中的性能开销,具体取决于所涉及的记录数量,它可能非常重要。

第一种方法也是最简单的,在大多数环境中,最简单的方法最容易支持。

要回答你的问题,第一种方法比第二种方法更快。