¿Por qué mi consulta de búsqueda simple es demasiado lenta?

¿Por qué mi consulta de búsqueda simple es demasiado lenta?

No sé por qué la búsqueda en mi tabla de "ciudades" es tan lenta. Mi consulta busca una tabla "ciudades" ubicadas a unos 25km de la ciudad. Utilizo esta consulta simple y la base de datos tarda casi 20 segundos en devolver resultados.

SELECT city_destination,distance FROM cities WHERE city_start='Wien' AND distance <= 25 ORDER BY distance ASC

El motor de tabla es InnoDB. La mesa tiene aprox. 7 millones de filas:

+--------------------+-------------+------+-----+---------+----------------+
| Field              | Type        | Null | Key | Default | Extra          |
+--------------------+-------------+------+-----+---------+----------------+
| id                 | int(11)     | NO   | PRI | NULL    | auto_increment |
| id_of_start        | int(11)     | NO   |     | NULL    |                |
| id_of_destination  | int(11)     | NO   |     | NULL    |                |
| city_start         | text        | NO   |     | NULL    |                |
| city_destination   | text        | NO   |     | NULL    |                |
| distance           | double      | NO   |     | NULL    |                |
+--------------------+-------------+------+-----+---------+----------------+

¿Alguien puede aconsejarme cómo optimizar una base de datos o una consulta?

Respuesta1

Para esta consulta, se supone que debes usar un índice para city_start + distancia

CREATE INDEX idx_citie_start_distance ON cities (city_start, distance);

También puedes crear dos índices: ciudad_inicio y otro para distancia. Eso también debería funcionar bien.

información relacionada