BRIN是否适合用于行修改时间戳的索引?

4

我有一个带有列的表格

ALTER TABLE foo
ADD COLUMN modified_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP

由触发器修改的

CREATE OR REPLACE FUNCTION trigger_set_timestamp()
    RETURNS TRIGGER AS $$
BEGIN
    NEW.modified_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER set_timestamp BEFORE UPDATE ON foo FOR EACH ROW EXECUTE PROCEDURE trigger_set_timestamp();

在这种情况下,BRIN索引是否是标准BTREE索引的良好替代品?

你的查询是否使用BRIN索引?使用EXPLAIN(ANALYZE,VERBOSE,BUFFERS)来获取结果。就我个人而言,我从未成功过这种类型的索引,但这可能更多地反映了我的工作,而不是BRIN本身。 - Frank Heikens
是的,因为该列上没有任何其他索引,并且“EXPLAIN ANALYSE”显示了收益。我想为这些值建立索引,以加快数据库中手动查询的速度,我只是想知道这是否是一个好的情况。这些查询很少被调用,在我的情况下减少磁盘使用和写入工作量是有前途的。 - slsy
1个回答

5

绝对不行,如果表格需要更新,BRIN索引将永远无法工作,您必须使用B树索引。


4
也就是说BRIN索引依赖于磁盘上物理相邻的块也具有相邻的时间戳。更新极有可能会破坏这种联系,而只需要很少的异常情况就可以使你的BRIN索引失效。 - Richard Huxton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接