MySQL datetime字段的最匹配

时间:2011-05-25 23:20:01

标签: mysql performance

我从数据库中的两个传感器获得原始数据。为了从这些传感器计算有意义的结果,我需要从每个传感器获得一个数据点。问题是他们的时间戳不能保证完全匹配。我可以请求MySQL从一个传感器获取时间戳并找到最接近另一个传感器的时间戳,但是需要为每一行运行此请求,然后每当添加新行时再次运行,我就是担心每当插入数据点时搜索表可能会成为性能负担,特别是如果添加更多这样的传感器。至少对于朴素算法,找到最接近的时间戳似乎是线性时间操作。这会导致性能问题,还是MySQL在这方面有优化?

2 个答案:

答案 0 :(得分:3)

您可以使用简单查询来获取最接近给定值的结果:

SELECT `timestampcolumn`
FROM `thetable`
ORDER BY ABS(`timestampcolumn` - givenvalue)
LIMIT 1

如果在右列上使用索引,应该可以解决这个问题并且性能不是很强。 MySQL是针对这样的查询而生成的。

答案 1 :(得分:0)

  1. 你可以使用MySQL函数制作一个Mask来转换日期的时间戳,如20130109(yyyymmddhhmmsszzz)或使用PHP,java等代码;

  2. 当您尝试使用SELECT查找行时,您可以执行以下操作:

  3. SELECT * FROM TABLE WHERE ADATE BETWEEN(LEFT(BEGINDATE, 8), LEFT(ENDDATE, 8));

    OR

    SELECT * FROM TABLE WHERE ADATA < LEFT(MYDATE, 8) LIMIT 1;

    OR

    在你需要的地方使用一个喜欢“_”的野猫卡,就像你想要改变的那一天一样。