Sven: JOIN-Query sehr langsam

Beitrag lesen

Ich habe die Anfrage nun soweit optimiert, dass sie halb so lange dauert.
Dazu frage ich erst alle Berater aus der Datenbank ab und in einer foreach-Schleife dann die Städte dazu.

Nun habe ich statt einer SQL-Anweisung (mit dem LEFT JOIN) ca. 370 SQL-Aufrufe.

Das Problem ist eindeutig die BETWEEN-Anweisung:
SELECT * FROM staedte WHERE $berater[plz] between plz_von and plz_bis

Deshalb habe ich die PHP-Datei nochmals überarbeitet:
$result_staedte = $db->query("SELECT * FROM staedte WHERE plz_von = $berater[plz]");
if (!mysql_num_rows($result_staedte))  {
 $result_staedte = $db->query("SELECT * FROM staedte WHERE plz_bis = $berater[plz]");
}
if (!mysql_num_rows($result_staedte)) {
 $result_staedte = $db->query("SELECT * FROM staedte WHERE $berater[plz] between plz_von and plz_bis");
}

Nun wird die BETWEEN-Anweisung erst ausgeführt, wenn die anderen zwei Anweisungen kein Ergebnis bringen. Nun habe ich 70 SQL-Abfragen mehr aber ich bekomme Ruck-Zuck ein Ergebnis.

Mich würde es aber sehr interessieren, wieso die BETWEEN-Anweisung solange dauert oder ob es eine Lösung mit nur einer SQL-Anweisung für dieses Problem gibt.