Tim*_*Tim 5 sql database postgresql unique set
我在 Postgresql 数据库中有一个不断增长的、可能非常大的表,其中包含来自不同“设备”的不同“通道”的“数据”,例如:
Table data:
id (PK)
device_id (FK -> device)
channel_id (FK -> channel)
timestamp (TIMESTAMP)
value (Float)
Run Code Online (Sandbox Code Playgroud)
我使用分区将表分成多个子表,每个子表对应一个设备,因为我从不需要在同一查询中不同设备的数据。由于并非所有设备都提供所有频道,因此我想获取单个设备的所有可用频道的列表。解决我的问题的一个简单的 SQL 查询是:
SELECT DISTINCT(channel_id) FROM data where device_id = 1;
Run Code Online (Sandbox Code Playgroud)
这工作得很好,但对于数据表中有很多条目的设备来说需要很长时间。使用分区大大加快了这一过程,因为数据库只需检查一个设备的条目,但对于某些设备来说仍然需要很长时间才能完成。
我的应用程序的属性使得为一台设备添加新通道类型的情况很少发生。大多数情况下,设备添加到数据库后频道会很快添加,之后不会再添加新频道。然而,可用通道的数据添加得相当频繁。我还需要经常向用户显示每个设备的可用频道列表,因此希望加快可用频道的查找速度。我已经在channel_ids上有一个索引,希望它能加快获取所需列表的速度,但检索列表仍然需要相当长的时间。
目前,我可以想出几种方法来解决我的问题:
在我看来,第 2 点和第 3 点似乎会增加很多我想避免的不必要的开销。由于我没有找到任何与此主题相关的内容,因此我目前认为解决方案 5. 是我要采用的方法。但是,我想知道是否有人对我的问题有更好的、可能基于数据库的解决方案。
感谢您的帮助。
| 归档时间: |
|
| 查看次数: |
5731 次 |
| 最近记录: |