Por que minha consulta de pesquisa simples é muito lenta?

Por que minha consulta de pesquisa simples é muito lenta?

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.

informação relacionada