Postgres不会使用正确的索引

问题描述 投票:1回答:1

我有下表:

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,现在更易于管理。

任何想法可能有什么问题吗?

sql postgresql indexing query-performance
1个回答
0
投票

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

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

如果是这种情况,则可以在day上使用BRIN索引。替代方法是(day,value)上的B树索引。

© www.soinside.com 2019 - 2024. All rights reserved.