sql >> Database >  >> RDS >> Mysql

MySQL:optimale index voor tussenvragen

Ik weet niet zeker waarom, maar het toevoegen van een order-by-clausule en limiet aan de query lijkt altijd te resulteren in een indexhit en wordt uitgevoerd in een paar milliseconden in plaats van een paar seconden.

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

Dit is nu goed genoeg voor mij, hoewel ik graag zou willen weten waarom de optimizer besluit de index in het andere geval niet te gebruiken.



  1. ODBC-oproep mislukt met opgeslagen procedure - Doorzoek query

  2. T-SQL - Gegevens in bovenliggende en onderliggende tabellen invoegen

  3. MySQL Vind het totale aantal berichten per gebruiker

  4. SQL ORDER BY-clausule voor beginners