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.