在PostgreSQL中选择10000条记录花费的时间太长



我的表包含10亿条记录。它也按月份划分。Id和日期时间是表的主键。当我选择时

select col1,col2,..col8
from mytable t 
inner join cte on t.Id=cte.id and dtime>'2020-01-01' and dtime<'2020-10-01'

它使用索引扫描,但选择需要5分钟以上的时间。请推荐我。注意:我已将work_mem设置为1GB。cte表结果将在3秒内随附。

这是join的本质,通常被称为耗时操作。

首先,我建议使用in而不是join。当然,它们有不同的含义,但在某些情况下,从技术上讲,它们可以互换使用。看看这个问题。

其次,根据关系代数,每当您使用join时,mytable表的每一行都与第二个表中的每一行都组合在一起,DBMS需要制作一个巨大的临时表,并最终删除不合适的行。毫无疑问,所有的步骤和结果都需要很长时间。在使用联接操作之前,最好先筛选表(例如基于mytable的日期(并使其变小,然后使用联接操作。

最新更新