Почему мой простой поисковый запрос выполняется слишком медленно?

Почему мой простой поисковый запрос выполняется слишком медленно?

Я не знаю, почему поиск в моей таблице "города" такой медленный. Мой запрос ищет таблицу "города", расположенную примерно в 25 км от города. Я использую этот простой запрос, и базе данных требуется почти 20 секунд, чтобы вернуть результаты.

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

Движок таблиц — InnoDB. Таблица содержит около 7 миллионов строк:

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

Может ли кто-нибудь посоветовать, как оптимизировать базу данных или запрос?

решение1

Для этого запроса вы должны использовать индекс для city_start + distance

CREATE INDEX idx_citie_start_distance ON cities (city_start, distance);

Вы также можете создать два индекса: city_start и еще один для расстояния. Это тоже должно работать нормально.

Связанный контент