在MySQL中找到最接近整数的最有效方法?

hey*_*sme 6 mysql performance

我在MySQL数据库中有一个表,我想从中选择与另一个给定时间戳具有最接近时间戳的行.

time是timestamp列(整数UNIX时间戳).我1250710000任意选择.

这是我提出的查询,我想知道是否有更有效的方法:

SELECT *, ABS(time - 1250710000) AS time_dist FROM table
 ORDER BY time_dist ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

这是最好的方法吗?

Jos*_*vis 10

假设time已编入索引,您几乎可以免费获得一条记录:

SELECT * FROM table WHERE time > 1250710000 ORDER BY time LIMIT 1
Run Code Online (Sandbox Code Playgroud)

如果我没有错,同样适用于前一条记录,MySQL将以相反的顺序读取索引.使用两者中的UNION,按日期差异命令它们瞧!结果将如下所示

SELECT *
FROM
(
    (SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time > 1250710000 ORDER BY time ASC LIMIT 1)
    UNION ALL
    (SELECT *, ABS(time - 1250710000) AS time_diff FROM table WHERE time < 1250710000 ORDER BY time DESC LIMIT 1)
) AS tmp
ORDER BY time_diff
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

理想情况下,代替>并且<您应该使用>=<=使用其主ID来排除引用记录,以便考虑共享相同时间戳的记录.