Мне нужно выбрать строку из таблицы, которая содержит более 5 миллионов строк.Это таблица всех диапазонов IP.В каждой строке есть столбцы upperbound
и lowerbound
.Все они являются целыми числами, а число является целочисленным представлением IP-адреса.
Выбор:
select *
from iptocity
where lowerbound < 3529167967
and upperbound >= 3529167967
limit 1;
Моя проблема
..., что выбор занимает слишкоммного времени.Без индекса для таблицы InnoDB это занимает 20 секунд.Если это на MyISAM, то это занимает 6 секунд.Мне нужно, чтобы оно было менее 0,1 сек.И мне нужно иметь возможность обрабатывать сотни таких выборок в секунду.
Я пытался создать индекс для InnoDB, как для столбцов верхний и нижний столбцы.Но это не помогло, потребовалось еще больше времени, например, 40 секунд, чтобы выбрать IP.Что случилось?Почему индекс не помог?Работает ли индекс только с оператором =, а операторы>, <не могут использовать индексы?Что мне нужно сделать, чтобы ускорить выбор менее 0,1 секунды? </p>