我不知道为什么在我的“城市”表中搜索如此缓慢。我的查询正在寻找距离城市约 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 | |
+--------------------+-------------+------+-----+---------+----------------+
谁能告诉我如何优化数据库或查询?
只是猜测发生了什么,因为您没有提供查询计划或您创建的索引。
假设您希望此查询返回相对较少的行。
索引中列的顺序很重要,您只有一个相等过滤器,
city_start
所以这应该放在前面,distance
否则它不能用作索引选择性的一部分(参见https://ctandrewsayer.wordpress.com/2017/03 /24/the-golden-rule-of-indexing/了解更多信息)