Postgresql 如何在postgres中启用索引顺序文件

Postgresql 如何在postgres中启用索引顺序文件,postgresql,rdbms,b-tree,Postgresql,Rdbms,B Tree,我正在编写一个由Postgres DB支持的应用程序。 应用程序就像一个日志系统,主表如下 create table if not exists logs ( user_id bigint not null, log bytea not null, timestamp timestamptz not null default clock_timestamp() at time zone 'UTC' ); 其中一个主要查询是获取关于

我正在编写一个由Postgres DB支持的应用程序。 应用程序就像一个日志系统,主表如下

create table if not exists logs
(
    user_id   bigint      not null,
    log       bytea       not null,
    timestamp timestamptz not null default clock_timestamp() at time zone 'UTC'
);

其中一个主要查询是获取关于某个
用户id
的所有
log
,按时间戳desc排序。最好是在后台Postgres DB将关于相同
用户id
的所有行存储在一个页面或连续页面中,而不是分散在磁盘上


正如我在教科书中回忆的那样,这就是所谓的“索引顺序文件”吗?如何引导Postgres这样做?

简单的做法是创建一个搜索引擎以加快搜索速度:

CREATE INDEX logs_user_time_idx ON logs (user_id, timestamp);
这将加快查询速度,但会占用磁盘上的额外空间,并减慢表上的所有
INSERT
操作(必须维护索引)。没有免费的午餐

当你提到“索引顺序文件”时,我想你是在谈论这个问题。但您可能指的是所谓的索引或有组织的表,它本质上保持表本身的特定顺序。这样可以进一步加快搜索速度。但是,PostgreSQL没有这个功能

要使PostgreSQL中的磁盘访问更高效,您最好运行
CLUSTER
命令,该命令按索引顺序重写表:

CLUSTER logs USING logs_user_time_idx;
但请注意:

  • 该语句重写了整个表,因此可能需要很长时间。在此期间,无法访问该表

  • 后续的
    INSERT
    s将无法维持表中的顺序,因此它会随着时间的推移而“腐烂”,一段时间后,您将不得不再次
    CLUSTER