我正在建立一个简单的sqlite数据库来保存传感器读数.表格看起来像这样:
sensors - id (pk) - name - description - units sensor_readings - id (pk) - sensor_id (fk to sensors) - value (actual sensor value stored here) - time (date/time the sensor sample was taken)
该应用程序将从大约30个不同的传感器每月捕获大约100,000个传感器读数,并且我希望尽可能长时间地将所有传感器读数保留在DB中.
大多数查询都在表单中
SELECT * FROM sensor_readings WHERE sensor_id = x AND time > y AND time < z
此查询通常会返回大约100-1000个结果.
所以问题是,在上述查询变得太耗时之前,sensor_readings表有多大(在标准PC上超过几秒钟).
我知道一个修复可能是为每个传感器创建一个单独的sensor_readings表,但如果没有必要,我想避免这种情况.有没有其他方法来优化此数据库架构?
如果您要在查询中使用时间,那么为它添加索引是值得的.这将是我根据您的信息建议的唯一优化.
每月100,000次插入相当于每分钟大约2.3次,因此另一个索引不会太繁重,它会加快您的查询速度.我假设所有30个传感器都有100,000次插入,而不是每个传感器100,000次,但即使我错了,每分钟70次插入仍然可以.
如果性能确实成为问题,您可以选择将旧数据卸载到历史表(例如,sensor_readings_old),并仅在非历史表(sensor_readings)上执行查询.
然后,您至少可以获得所有数据,而不会影响正常查询.如果你真的想要获取较旧的数据,你可以这样做,但你会发现对它的查询可能需要一段时间.