首页 > 解决方案 > 具有动态 where 子句的 Postgres 分区表

问题描述

我有一个分区表,用于获取具有 Y 列的记录的 X 列的总和。

如果我使用

where logdate >= '2020-01-01' AND logdate < '2020-02-01'

我得到一个干净的查询计划和执行,而如果我这样做

where logdate >= (SELECT CURRENT_DATE - 30) AND logdate < '2020-02-01'

实际上,SELECT CURRENT_DATE - 30这只是一个显示初始日期将动态生成的示例- 它使用位图堆扫描和索引扫描遍历所有分区,导致查询执行速度慢 10 倍。

我可以做些什么来改进对给定部分(where 子句)的查询,还是我应该辞职并尝试使用我当前使用的编程语言来操作日期?

标签: sqlpostgresqlpostgresql-9.5

解决方案


推荐阅读