我有下表:
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
上的索引似乎没有用。您可以通过删除它来节省空间和数据修改时间。
BRIN索引不能用于支持ORDER BY
,除非按索引顺序插入行并且表上没有更新或删除,否则它根本无法工作。
如果是这种情况,则可以在day
上使用BRIN索引。替代方法是(day,value)
上的B树索引。