2014-01-29 5 views
0

Предположим, что в базе данных есть столбец с удвоением, и у меня есть целевое значение. Назовем его х. Столбец индексируется и сортируется в базе данных. Каков наилучший способ найти x или ближайшее значение для x (если в столбце нет x) в этом столбце?Поиск ближайшего значения соответствия в столбце таблицы MYSQL

(предположим, что таблица действительно большая (более 10 000 000 строк) и x или ближайшее значение для x всегда хранится в последних строках (в пределах последних 1000 строк, но это значение не является точным). Время запроса является критическим, Я ищу как можно быстрее метода)

заранее спасибо

ответ

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; 
+0

Спасибо, Но я хочу запросить это каждую секунду! Это мой последний выбор? – Mosi

Смежные вопросы