(
select *
from table
where value >= $myvalue
order by value asc
limit 1
)
union
(
select *
from table
where value < $myvalue
order by value desc
limit 1
)
order by abs(value - $myvalue)
limit 1
Это может показаться нелогичным, но скорость будет выше, чем другие запросы, показанные до сих пор.
Это связано с тем, что запросы greater than
и less than
выполняются быстрее.
Тогда выполнение ABS
для двух значений - ничто.
Это даст вам самый быстрый возврат в одном запросе, который я только могу придумать.
Выполнение ABS
на всей таблице будет медленным, так как будет сканировать всю таблицу.