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.