sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Optimalt index för mellan frågor

Inte säker på varför, men att lägga till en order by klausul och limit i frågan verkar alltid resultera i en indexträff och körs på några millisekunder istället för några sekunder.

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

Det här är tillräckligt bra för mig nu, även om jag skulle älska att veta resonemanget bakom varför optimeraren bestämmer sig för att inte använda indexet i det andra fallet.



  1. MySQL främmande nyckel, kan inte skapa tabell (errnr:150)

  2. Vad är det enklaste sättet att få alla föräldrar till en post med hjälp av id / parent_id-modellen i mysql/php?

  3. mysql kan inte ge användaren behörighet, får felmeddelande:ERROR 1819 (HY000):Ditt lösenord uppfyller inte de nuvarande policykraven

  4. Kombinera två tabeller som inte har några gemensamma fält