Hallo!
Ich bin relativ neu im Bereich MySQL und würde mich freuen, wenn mir jemand helfen könnte.
Im Moment arbeite ich an einem Navigationsprogramm. Dazu benutze ich die Daten der OpenStreetMap (openstreetmap.org) und eine MySQL Datenbank mit einem etwas älteren Schema als dieses hier (im Grunde aber nicht viel anders):
http://wiki.openstreetmap.org/wiki/File:Osm_model.png
Die Tabelle 'ways' habe ich ein wenig modifiziert. Sie sieht jetzt so aus:
http://img688.imageshack.us/img688/1646/sql1a.jpg
Die Felder maxlat,minlat,maxlon,minlon werden benutzt, um jene Wege zu suchen, die im aktuellen Kartenausschnitt liegen. Mit den quick*-Feldern können Wege ebenfalls gefiltert werden. Mein Renderprogramm ruft einen Query auf, der z.B. so aussieht:
Code:
SELECT * FROM ways WHERE ((quickamenity='parking') OR (quickhighway<>'') OR (quicklanduse='forest') OR (quickbuilding='yes')) AND maxlon>7.61655923529412 AND minlon<7.63538276470588 AND maxlat>51.9546756470588 AND minlat<51.9664403529412 ORDER BY quicklevel ASC
Alles funktioniert so weit und sieht gut aus. Wenn ich jetzt beispielsweise komplett Münster schreibe, hat die Tabelle 'ways' schon an die 230.000 Einträge und die Abfragen dauern schon sehr lange. Das ist natürlich viel zu viel für eine Live-Map. Also habe ich mal nach einer schnelleren Lösung gesucht und einen Ansatz mit Indizes aufgestellt:
http://img197.imageshack.us/img197/9894/sql2h.jpg
Jedoch benütigt der oben genannte Query immernoch an die 2,5 Sekunden. Ich habe leider keine Ahnung, ob das so schlau ist, bzw. ob und wie man Indizes am besten benutzt.
Ich würde mich freuen, wenn mir jemand helfen könnte, meine Tabellenstruktur, Indizeslösung oder Abfrage zu verbessern.
Schönen Gruß,
Myribo