sql >> Base de Datos >  >> RDS >> Mysql

MySQL:índice óptimo para entre consultas

No estoy seguro de por qué, pero agregar una cláusula order by y un límite a la consulta parece dar como resultado siempre una coincidencia de índice y se ejecuta en unos pocos milisegundos en lugar de unos pocos segundos.

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

Esto es lo suficientemente bueno para mí ahora, aunque me encantaría saber el motivo por el cual el optimizador decide no usar el índice en el otro caso.