插入零行需要2分钟



我有一个长选择语句完成插入,选择在几秒钟内返回零行,但插入部分需要1到2分钟....

with t1 as ()
insert into myscheme.sometable -- if I comment this line it will return zero rows in 3 sec
select t1  

为了进一步简化,这段代码是3秒,结果是零行:

with t1 as ()
select t1 

及以下是2分钟,但它使用select语句运行3秒(也为零行插入):

with t1 as ()
insert into myscheme.sometable
select t1 

所以我使用了Arvo建议来处理tmp表:

select needed rows into temporary table and insert from there?

不知道为什么postgres在做优化的时候会做这样的反优化,但是tmp表的技巧已经足够好了!

总而言之,当插入到一个表时,在插入之前也用于select查询,最好是创建一个临时表,然后从这个表进行插入。

最新更新