Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL :index optimal entre les requêtes

Je ne sais pas pourquoi, mais l'ajout d'une clause order by et d'une limite à la requête semble toujours entraîner un index et s'exécute en quelques millisecondes au lieu de quelques secondes.

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

C'est assez bon pour moi maintenant, même si j'aimerais savoir pourquoi l'optimiseur décide de ne pas utiliser l'index dans l'autre cas.