Не съм сигурен защо, но добавянето на поръчка по клауза и ограничение към заявката изглежда винаги води до попадане в индекс и се изпълнява за няколко милисекунди вместо за няколко секунди.
explain select * from geo_ip where 2393196360 between start_ip and end_ip order by start_ip desc limit 1;
+----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
| 1 | SIMPLE | geo_ip | range | start_ip,end_ip | start_ip | 4 | NULL | 975222 | Using where |
+----+-------------+--------+-------+-----------------+----------+---------+------+--------+-------------+
Това е достатъчно добре за мен сега, въпреки че бих искал да знам причините, поради които оптимизаторът решава да не използва индекса в другия случай.