Я не знаю, почему поиск в моей таблице "города" такой медленный. Мой запрос ищет таблицу "города", расположенную примерно в 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 и еще один для расстояния. Это тоже должно работать нормально.