作为项目的一部分,我一直在从现场部署的许多传感器收集数据。这样做的目的是了解设备的性能以及可能存在的任何潜在问题或错误。
我将数据存储在数据库的单个表中,该表具有id(primary),MAC_address,名称,状态,时间戳记。
MAC_address是确保与物理设备始终相同的一件事,而这正是我一直在使用的,主要用于从数据库中提取信息。
我的目标是能够在特定时间段内为可从下拉列表中选择其MAC_address的特定设备提取数据。即使只执行一个SELECT DISTINCT查询来获取唯一的MAC地址列表也要花很多时间,但是为该列创建索引似乎可以加快速度。但是,现在仍然需要30秒以上的时间才能从数据库中提取任意数量的完整行。
从如此大的数据库中加速查询的最佳方法是什么?
答案 0 :(得分:0)
单张桌子...错了。
一个表描述了每个“设备”(或“传感器”)。它有一个id
,也许是2个字节的SMALLINT UNSIGNED
(范围是0..65K-您将没有更多的传感器?)。请注意,MAC_address和名称属于此表。此id
用于另一张表...
另一个表包含sensor_id
,timestamp
和value
。该表应具有PRIMARY KEY(sensor_id, timestamp)
,并且应为ENGINE = InnoDB`。现在,在一段时间内查找一个传感器的所有读数非常有效。
这完全避免了SELECT DISTINCT
,因为第一个表中没有重复。
如果您有下拉菜单,那么TINYINT UNSIGNED
(1字节,0..255)可能很大。
好的,我帮了两个SELECTs
;你还会有什么。请记住,性能主要取决于您需要触摸的行数。这就是您拒绝的人。