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快得多(一行接一行)方法。真正知道:试试看!测量一下!