postgresql - 在 PostgreSQL 中选择 10000 条记录需要很长时间
问题描述
我的表包含 10 亿条记录。它也按month.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 秒内提供。
解决方案
嗯,这是加入的本质,它通常被称为耗时的操作。
首先,我建议使用in
而不是join
. 当然,它们有不同的含义,但在某些情况下,从技术上讲,您可以互换使用它们。检查这个问题。
其次,根据关系代数,每当你使用join时,mytable表的每一行都与第二个表的每一行相结合,DBMS需要做一个巨大的临时表,最后排除不合适的行。毫无疑问,所有步骤和结果都需要很长时间。在使用 Join 操作之前,最好过滤您的表(例如基于mytable的日期)并使其更小,然后使用 join 操作。
推荐阅读
- python - How to print a specific element of a list in python by searching if a word is in that element?
- android - Add a completion Listener To .setText() Method
- unity3d - Joystick intercalate with camera rotation
- plsql - 我如何用 plsql 转换那个 'a','b','c' 中的 'a,b,c'
- xamarin.forms - Closing Modal Page in Xamarin.Forms
- swift - 如何获得所有真实值
- react-bootstrap - Can't change width of React Bootstrap button
- android - 检查开发设置的功能未按预期工作
- sql - IN 语句子查询的执行次数
- django - Keep a django app user logged in with safari "add to home screen"