Não sei por que a pesquisa na minha tabela "cidades" é tão lenta. Minha consulta busca uma tabela "cidades" localizada a cerca de 25km da cidade. Eu uso essa consulta simples e o banco de dados leva quase 20 segundos para retornar resultados.
SELECT city_destination,distance FROM cities WHERE city_start='Wien' AND distance <= 25 ORDER BY distance ASC
O mecanismo de tabela é InnoDB. A mesa tem aprox. 7 milhões de linhas:
+--------------------+-------------+------+-----+---------+----------------+
| 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 | |
+--------------------+-------------+------+-----+---------+----------------+
Alguém pode me aconselhar como otimizar um banco de dados ou consulta?
Responder1
Para esta consulta, você deve usar um índice para city_start + distance
CREATE INDEX idx_citie_start_distance ON cities (city_start, distance);
Você também pode criar dois índices: city_start e outro para distância. Isso também deve funcionar bem.