我的数据集是一个包含3行的表:硬盘的ID,空白空间的百分比,时间戳。该表每20分钟附加一个每个HDD的新状态(1200个)。MySQL:根据时间戳间隔选择数据
如果我想选择我的硬盘池的最后一个状态,我需要MAX(时间戳)和MIN(时间戳),如果我想要最老的。
但是说我有一个给定的时间戳,我怎么能要求MySQL从这个时间戳的大约X秒钟内检索数据?
我的数据集是一个包含3行的表:硬盘的ID,空白空间的百分比,时间戳。该表每20分钟附加一个每个HDD的新状态(1200个)。MySQL:根据时间戳间隔选择数据
如果我想选择我的硬盘池的最后一个状态,我需要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);
正如在其他答复中提到,当选择是基于timestamp
现场查询速度很慢。
您可以在该列中添加INDEX
加快步伐:
ALTER TABLE <table_name> ADD INDEX(`timestamp`)
需要注意的是,根据您的表的大小,你第一次添加需要一段时间的索引。其次,它会减慢INSERT
查询并增加数据库的大小。这对每个人都是不同的,所以你只能通过测试找出答案。
它的工作原理!但速度很慢。有关如何加快此任务的任何想法? – Cystack
我需要看到连接有可能有一种方法来计算timestampadd ONCE并将其用于每条记录而不是每条记录。我也得看看你是如何得到“MAX”等几件事的。您使用的SQL以及执行计划将有助于确定瓶颈的位置以及解决性能问题。 – xQbert