BRIN 是行修改时间戳的良好索引吗?

sls*_*lsy 4 postgresql

我有一张带有一列的桌子

ALTER TABLE foo
ADD COLUMN modified_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)

由触发器修改

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();
Run Code Online (Sandbox Code Playgroud)

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

Lau*_*lbe 6

强调一下,不。BRIN 索引永远不适用于接收更新的表。您将必须使用 B 树索引。

  • 也就是说,BRIN 依赖于磁盘上物理上相邻且具有相邻时间戳的磁盘块。更新极有可能破坏这种连接,并且不需要太多例外就会使您的布林索引变得无用。 (4认同)