假设数据库中有一列双打,并且我有一个目标值。我们称之为x。该列已编制索引并在数据库中排序。 在此列中找到x或x的最近值(如果列中没有x)的最佳方法是什么?
(假设表格非常大(超过10,000,000行),x或x的最近值始终存储在最后一行中(最后1000行,但这个值不准确)。查询时间至关重要,I我正在寻求尽可能快的方法。
提前致谢
答案 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;