我不知道为什么在我的“城市”表中搜索速度这么慢。我的查询是查找距离城市约 25 公里的“城市”表。我使用这个简单的查询,数据库需要近 20 秒才能返回结果。
SELECT city_destination,distance FROM cities WHERE city_start='Wien' AND distance <= 25 ORDER BY distance ASC
表引擎是 InnoDB。该表约有 700 万行:
+--------------------+-------------+------+-----+---------+----------------+
| 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 和 distance。这应该也可以正常工作。