我的数据集是一个包含 3 行的表:硬盘驱动器的 ID、空白空间的百分比、时间戳。该表每 20 分钟附上每个 HDD(其中 1200 个)的新状态。
如果我想选择我的 HDD 池的最后一个状态,我会选择 MAX(时间戳),如果我想要最旧的,我会选择 MIN(时间戳)。
但是假设我有一个给定的时间戳,我怎么能要求 MySQL 从这个时间戳附近或多或少的 X 秒中检索数据?
我的数据集是一个包含 3 行的表:硬盘驱动器的 ID、空白空间的百分比、时间戳。该表每 20 分钟附上每个 HDD(其中 1200 个)的新状态。
如果我想选择我的 HDD 池的最后一个状态,我会选择 MAX(时间戳),如果我想要最旧的,我会选择 MIN(时间戳)。
但是假设我有一个给定的时间戳,我怎么能要求 MySQL 从这个时间戳附近或多或少的 X 秒中检索数据?
WHERE yourTimeStamp
between TIMESTAMPADD(SECOND,-3,yourtimestamp)
and TIMESTAMPADD(SECOND, 3,yourtimestamp)
其中 -3 和 + 3 被替换为 X
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampadd以获得更多帮助。
像这样:
WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND)
AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND);
As mentioned in the other answer, your query is slow when selection is based on the timestamp
field.
您可以INDEX
在该列上添加一个以加快速度:
ALTER TABLE <table_name> ADD INDEX(`timestamp`)
请注意,根据表的大小,第一次添加索引需要一段时间。其次,它会减慢INSERT
查询速度并增加数据库的大小。这对每个人来说都是不同的,所以你只需要通过测试来找出答案。