postgresql Postgres从一个巨大的表中选择最新记录

pcww981p  于 9个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(100)

我正在使用postgres作为我的一个基于GPS的资产跟踪项目的数据存储。包含来自数千台设备的GPS数据的表每天都在增长。现在在应用程序的许多功能中(基于Web的管理面板,客户移动的应用程序等)我需要选择一个特定的GPS设备的最后记录存储GPS数据的表具有device_id列,沿着一些其它列,如纬度、纬度、速度、航向、时间戳等。
当我使用查询时,

select {columns}
from table
where device_id = xxx
order by record_time DESC
offset 0, limit 1

字符串
下面是表模式


的数据



注意:从屏幕截图中删除了一些列。
查询需要很长时间才能完成。我知道这是一个非常常见的问题,因为选择查询首先运行,它选择所有数据,然后找出顶部。我可能会使用where条件降低行的初始编号,如“record_time within last 24 hours”,但有一个问题。如果设备超过24小时没有发送数据,它将选择没有记录。我可以将24小时增加到72小时之类的时间来避免这种情况。但这并不是充分的证明。
我的另一个想法是将最后一个GPS记录保存在一个单独的表中,并在每次从设备接收GPS数据时更新记录。
我的问题是,是否可以从表中获取最新的记录,而不限制record_time或使用单独的表?

vnjpjtjt

vnjpjtjt1#

在我看来,最好把GPS数据分成不同的表。例如,有三个表,第一个表包含24小时的记录,第二个包含24- 72小时的记录,最后一个包含历史记录。你应该做一个机制来更新记录到适当的表。也许我们可以称之为缓冲表解决方案。如果你做的查询操作少记录表,它将花费更少的时间。您还可以为表列创建索引,以提高查询性能。

相关问题