优化数据受列限制的postgres查询



我有一个postgres表,其中有一列已存档(true/false(。我有一个用例,我每个月都归档数据,所以现在我90%的数据是archived=true

当我查询我只想在archive=false上查询的表时,99%的时间都需要执行,因为当我与其他表进行联接或添加多个筛选器时,它不使用索引。即使我强制psql使用这个索引,当我使用filter时,我仍然无法使用其他列的索引。

我很难理解你是如何优化这样的设计的,这样你的查询总是很快。

PostgreSQL有一些有趣的索引方法,其中之一就是部分索引。部分索引是节省一些磁盘空间和提高记录查找性能的好方法。常见的规则是";当你负担得起的时候就用它"——换言之,如果所有查询都涉及某种过滤器,那么通常认为将这种过滤器包含在索引定义中是一个好主意,以减小其大小并提高其性能。以下是我们如何创建部分索引的示例:

create index non_archive_order_date_idx
on orders (order_date)
where archive=false;

如果我们正在优化的查询在计费列上包含相同的筛选器,则查询计划器将考虑此索引。过滤器针对的是表中整个行容量的一小部分,我们应该看到相应索引扫描的性能有了显著提高。

最新更新