Sql “绩效差异”;在“选择”中插入;vs";选择并循环插入";

Sql “绩效差异”;在“选择”中插入;vs";选择并循环插入";,sql,postgresql,Sql,Postgresql,这方面有什么绩效优势吗 INSERT INTO table1( column1) select * from table2; 反对 BEGIN FOR t2Row IN SELECT * FROM table2 LOOP EXECUTE 'INSERT INTO ...' END LOOP; END; 最有趣的是postgresql数据库引擎。我相信第一个查询会消耗更多的内存,因为它会缓冲整个结果,但第一个查询会更快吗 这里有一个关于这个问题的答案: 我认为第一种方法比第二种方法快得

这方面有什么绩效优势吗

INSERT INTO table1( column1) select * from table2;
反对

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

最有趣的是postgresql数据库引擎。我相信第一个查询会消耗更多的内存,因为它会缓冲整个结果,但第一个查询会更快吗

这里有一个关于这个问题的答案:

我认为第一种方法比第二种方法快得多,因为它是基于集合的(正如marc_所提到的)

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

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


不过,为了回答您的问题,第一种方法比第二种方法快。

不了解您的表结构以及Postgres的详细操作,根据我的经验,我假设基于集合的方法(
INSERT INTO table 1(…)SELECT(cols)…
将比RBAR快得多(一行接一行)方法。真正知道:试试看!测量一下!