MySQL:基于时间戳间隔选择数据

MySQL:基于时间戳间隔选择数据,mysql,Mysql,我的数据集是一个有3行的表:硬盘的ID、空闲空间的百分比、时间戳。该表每20分钟随附每个HDD(其中1200个)的新状态 如果我想选择我的硬盘池的最后一个状态,我会选择MAX(时间戳),如果我想选择最旧的,我会选择MIN(时间戳) 但是假设我有一个给定的时间戳,我怎么能要求MySQL在这个时间戳前后的X秒左右检索数据呢 WHERE yourTimeStamp between TIMESTAMPADD(SECOND,-3,yourtimestamp) and TIMESTAMP

我的数据集是一个有3行的表:硬盘的ID、空闲空间的百分比、时间戳。该表每20分钟随附每个HDD(其中1200个)的新状态

如果我想选择我的硬盘池的最后一个状态,我会选择MAX(时间戳),如果我想选择最旧的,我会选择MIN(时间戳)

但是假设我有一个给定的时间戳,我怎么能要求MySQL在这个时间戳前后的X秒左右检索数据呢

WHERE yourTimeStamp 
  between TIMESTAMPADD(SECOND,-3,yourtimestamp) 
      and TIMESTAMPADD(SECOND, 3,yourtimestamp)
其中-3和+3被X取代

获取更多帮助。

如下所示:

WHERE timestamp BETWEEN DATE_SUB('<given_timestamp>', INTERVAL 5 SECOND) 
    AND DATE_ADD('<given_timestamp>', INTERVAL 5 SECOND);

请注意,根据表的大小,第一次添加索引需要一段时间。其次,它减慢了
INSERT
查询的速度,并增加了数据库的大小。这对每个人来说都是不同的,所以你只需要通过测试来发现。

它是有效的!但是它非常慢。有没有关于如何加快这项任务的想法?我需要看看连接有没有一种方法可以计算timestampadd一次,并将其用于每个记录,而不是每个记录。我还要看看你是如何得到“最大”和其他一些东西的。您与执行计划一起使用的SQL将有助于确定瓶颈在哪里以及如何解决性能问题。@Cystack抱歉,您是对的。修正了。。。顺便说一句,为了加快基于timetstamp字段的查询速度,您必须在该列上添加一个索引。它已经被索引,只需要大约16秒,我认为这相当长:/不过您的代码现在可以工作;)和另一个一样快(或一样慢)!thanks@Cystack很高兴它能工作。。。您可以运行
EXPLAIN
,找出它执行如此缓慢的原因
ALTER TABLE <table_name> ADD INDEX(`timestamp`)