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 树索引
我有以下 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)
.