Postgres 不会使用正确的索引

Postgres wont use the proper index

我有以下 table:

id       : id
dim_id   : fk
day      : date
value    : int

具有以下指标:

id             : BTREE
dim_id         : BTREE
dim_id, day    : BTREE
day, value     : BRIN

当我进行查询时

EXPLAIN ANALYSE
SELECT *
FROM table_name
WHERE day = '2019-11-18'
ORDER BY day, value

查询时间太长,因为它使用的索引是dim_id, day,然后对结果进行排序,这完全违背了day,value索引的目的。最后一个索引是 BRIN 而不是 BTREE 的原因是,否则单独索引使用 200GB,现在更易于管理。

有什么想法是错误的吗?

单独 dim_id 上的索引似乎没有用。您可以通过删除它来节省 space 和数据修改时间。

BRIN 索引不能用于支持 ORDER BY,除非按索引顺序插入行并且 table 上没有更新或删除,否则它根本不起作用。

如果是这种情况,您可以在 day 上使用 BRIN 索引。替代方案是 (day,value).

上的 B 树索引