在MYSQL表列中查找最接近的匹配值

时间:2014-01-29 06:48:04

标签: mysql

假设数据库中有一列双打,并且我有一个目标值。我们称之为x。该列已编制索引并在数据库中排序。 在此列中找到x或x的最近值(如果列中没有x)的最佳方法是什么?

(假设表格非常大(超过10,000,000行),x或x的最近值始终存储在最后一行中(最后1000行,但这个值不准确)。查询时间至关重要,I我正在寻求尽可能快的方法。

提前致谢

1 个答案:

答案 0 :(得分:1)

索引不会帮助您找到“最接近X的值”,因为如果它是可变的,则无法索引该特定表达式。

以下查询将为您提供与col最接近的x的值以及id

SELECT col, id FROM table ORDER BY ABS(x - col) LIMIT 1;

对于一张大桌子来说,这会很慢。如果您完全确定最接近的值在“最后1000行”内,那么您可以使用子查询来缩短一些时间,假设“最后1000行”表示“具有最高1000行id的行值“:

SELECT col, id FROM 
  (SELECT col, id FROM table ORDER BY id DESC LIMIT 1000) t
ORDER BY ABS(x - col) LIMIT 1;