Итак, у меня есть таблица mysql, которая выглядит примерно так, где первые 2 столбца содержат диапазоны.
1 , 5 , Value1
6 , 14 , Value2
14 , 18 , Value3
Как я могу запросить, какая строка имеет какое-то значение (т.е. если у меня есть 9, она возвращает Value2, если у меня 2, она возвращает Value1). Эта таблица размером около 10 мб, поэтому чем эффективнее, тем лучше.
Спасибо!
SELECT
val
FROM
table
WHERE
table.range_min <= 9
AND table.range_max >= 9
/* OR 9 BETWEEN table.range_min AND table.range_max*/
Для повышения эффективности добавьте индекс для столбцов range_min и range_max.
На самом деле это почти то же самое, что и madgnome, но IMO немного чище:
SELECT ... WHERE 9 BETWEEN min_value AND max_value;
where fielda >= 9 and fieldb <= 9
добавить индекс, который содержит это поле 2 в таблице
select col3 from thetable where 2 between col1 and col2
Для этого вам нужен комбинированный индекс col1
и col2
.