На основе
stackoverflow.com/questions/22125474/mysql-optimal... и миллионов других вариантов.
В общем случае
select * from ipBase where ? between start_ip and end_ip
работает не совсем правильно - запрос преобразуется в
select * from ipBase where start_ip<? and end_ip>?
Это формирует так называемый "открытый" интервал - найти все значения start_ip которые меньше заданного, и все end, которые больше.
Так как мы проверяем "точку" - это приведет в выборке вообще всех значений в базе в первой части, и пересечению с результатами второй.
Долго, дорого, очень.
Обычно решением является ограничить область поиска, те создать закрытый интервал. По факту диапазоны редко когда бывают более 32к значений "длиной", и запрос можно преобразовать в
select * from ipBase where ? between start_ip and end_ip and start_ip between ?-32k and ?.....
Это сильно быстрее, но не
"алгоритмично",
Интересуют именно красивые идеи для решения задачи на SQL, и вообще (академические) варианты решения нахождения вхождения точки в отрезок. За O(logn) или меньше :P