Warum ist meine einfache Suchanfrage zu langsam?

Warum ist meine einfache Suchanfrage zu langsam?

Ich weiß nicht, warum die Suche in meiner Tabelle „Städte“ so langsam ist. Meine Abfrage sucht nach einer Tabelle „Städte“, die etwa 25 km von der Stadt entfernt liegt. Ich verwende diese einfache Abfrage und die Datenbank benötigt fast 20 Sekunden, um Ergebnisse zurückzugeben.

SELECT city_destination,distance FROM cities WHERE city_start='Wien' AND distance <= 25 ORDER BY distance ASC

Die Tabellen-Engine ist InnoDB. Die Tabelle hat ca. 7 Millionen Zeilen:

+--------------------+-------------+------+-----+---------+----------------+
| 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    |                |
+--------------------+-------------+------+-----+---------+----------------+

Kann mir jemand einen Rat geben, wie ich eine Datenbank oder Abfrage optimieren kann?

Antwort1

Für diese Abfrage sollten Sie einen Index für city_start + distance verwenden

CREATE INDEX idx_citie_start_distance ON cities (city_start, distance);

Sie können auch zwei Indizes erstellen: city_start und einen weiteren für die Entfernung. Das sollte auch gut funktionieren.

verwandte Informationen