単純な検索クエリが遅いのはなぜですか?

単純な検索クエリが遅いのはなぜですか?

「都市」テーブルの検索がなぜこんなに遅いのかわかりません。クエリは、都市から約 25 km 離れた場所にある「都市」テーブルを検索しています。この単純なクエリを使用したところ、データベースが結果を返すまでに約 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 の 2 つのインデックスを作成することもできます。これも問題なく動作するはずです。

関連情報