Postgresql CTE 性能问题



我在查询中使用 CTE 时遇到性能问题。

这些查询很大,但它们之间的唯一区别是IN子句中侦听的 ID 数。

第一个在子句中包含 2000 个 ID,第二个IN子句中仅包含 1000 个 ID。

第一个的执行时间约为 33 秒,第二个 - 500 毫秒。

我也尝试增加/减少 ID 的数量,但无法找到性能下降的关键数字。

3000 个 ID - 36 个

4000 个 ID - 39 个

所以它不会增长,1000 到 2000 个 ID 之间的某个地方是关键点,但原因是什么?

对他们的分析:

第一个(慢一个(

https://gist.github.com/DonKeyHot1/7251adab3ca589c55ebead2ba75fbcf1

第二(快一(

https://gist.github.com/DonKeyHot1/48d85eaeeb84316bb43adf50114914d3

(它们太大,无法在此处发布(

这太长了,无法发表评论。

不要使用 CTE,而是将 id 放入临时表中,表中的id作为主键:

create table temp_ids (
id int primary key
);

这应该有助于优化程序生成良好的执行计划。

最新更新