如何在已经排序的PostgreSQL中存储数据

时间:2017-12-21 21:03:59

标签: postgresql sorting

有没有办法提示PostgreSQL数据库以排序的方式存储数据?

例如,我有这个SQL架构:

create table DataHolder(
    name text,
    path ltree primary key
);

create table Datas(
    time int primary key,
    foreign_dataholder_id ltree references Exchange(path)
);

我可以像这样填充它:

insert into DataHolder(name, path) values ('A', 'Sec1.SubSec1');
insert into DataHolder(name, path) values ('B', 'Sec1.SubSec2');
insert into DataHolder(name, path) values ('C', 'Sec2.SubSec1');
...

insert into Datas (time, foreign_exchange_id) values (1513889449, 'Sec1.SubSec1');
insert into Datas (time, foreign_exchange_id) values (1513889451, 'Sec1.SubSec1');
...

所以我有一些DataHolder表存储了一些像Sec1.SubSec1这样的数据容器,对于每个容器,我有很多数据。

但关键部分是数据始终将其主键作为unix时间戳,并始终将其作为感兴趣的时间范围区域进行查询,并按升序排序。

例如:

select * from Datas where foreign_dataholder_id = 'Sec1.SubSec1' and
  time >= 1513889450 and time <= 1513889451 order by time asc;

由于我总是以这种方式进行查询,因此告诉PostgreSQL已经在内部以Datas.time按升序排列这些数据,这是最好的,性能明智的,所以它不需要每次都这样做查询我。

这可能吗?如果没有,还有其他方法来设计这些表吗?

编辑:

我虽然谈到了一些解决方案,例如一个数组可以工作,因为我总能保证它已经排序,而且我对它的大部分添加都是在它的最后,不需要排序。

但是,由于桌子中间偶尔会有插入,因此可能有些难以实现或不高效。我不知道。

另一个想法是链接列表,但我不知道PostgreSQL是否支持这种数据类型或如何使用。

0 个答案:

没有答案