【发布时间】:2021-12-08 01:47:32
【问题描述】:
我有一个用插入完成的长选择语句,选择在几秒钟内返回零行,但插入部分需要 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
【问题讨论】:
-
让我猜猜 - 主要选择包括来自
myscheme.sometable的内容?您可以选择需要的行到临时表中并从那里插入吗? -
正确 :) 我正在检查某些数据是否已经存在,以便将它们包含在最终插入中。选择实际上在某些部分确实很重,因此为了避免这些计算,我检查是否已经处理了一些数据。希望减少计算时间,但实际上情况更糟。
-
您需要编辑您的问题,添加实际语句,并为慢查询添加
EXPLAIN (ANALYZE, BUFFERS)输出。 -
和一如既往,你的 Postgres 版本。
标签: sql postgresql query-optimization