Postgresql 如何在postgres中启用索引顺序文件
我正在编写一个由Postgres DB支持的应用程序。 应用程序就像一个日志系统,主表如下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' ); 其中一个主要查询是获取关于
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;
但请注意:
- 该语句重写了整个表,因此可能需要很长时间。在此期间,无法访问该表
- 后续的
s将无法维持表中的顺序,因此它会随着时间的推移而“腐烂”,一段时间后,您将不得不再次INSERT
表CLUSTER