Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:optymalny indeks między zapytaniami

Nie wiem dlaczego, ale dodanie klauzuli order by i limitu do zapytania wydaje się zawsze skutkować trafieniem indeksu i jest wykonywane w ciągu kilku milisekund zamiast kilku sekund.

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

To mi teraz wystarcza, chociaż chciałbym poznać powody, dla których optymalizator decyduje się nie używać indeksu w innym przypadku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest alternatywa klauzuli LIMIT w JPQL?

  2. MySQL Sortuj według 2 kolumn

  3. Błąd kodowania Unicode Kodek „latin-1” nie może zakodować znaku „\u2019”

  4. Zrzuć osadzoną bazę danych mysql do pliku tekstowego SQL

  5. Jak zaimportować DUŻE pliki sql do tabeli mysql?