Mysql

為什麼我的簡單搜尋查詢太慢了?

  • April 15, 2022

我不知道為什麼在我的“城市”表中搜尋如此緩慢。我的查詢正在尋找距離城市約 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    |                |
+--------------------+-------------+------+-----+---------+----------------+

誰能告訴我如何優化數據庫或查詢?

只是猜測發生了什麼,因為您沒有提供查詢計劃或您創建的索引。

假設您希望此查詢返回相對較少的行。

create index my_new_index on cities (city_start, distance );

索引中列的順序很重要,您只有一個相等過濾器,city_start所以這應該放在前面,distance否則它不能用作索引選擇性的一部分(參見https://ctandrewsayer.wordpress.com/2017/03 /24/the-golden-rule-of-indexing/了解更多資訊)

引用自:https://dba.stackexchange.com/questions/311013