「都市」テーブルの検索がなぜこんなに遅いのかわかりません。クエリは、都市から約 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 つのインデックスを作成することもできます。これも問題なく動作するはずです。