GeoLocations - MySQL - performant durchsuchen?

  • 1 Antworten
  • Letztes Antwortdatum
M

mdmc

Neues Mitglied
0
Hallo zusammen,

ich habe folgendes Problem:

Ist-Zustand:
Meine App schreibt die Google Geo-koordinaten (nur die Koordinaten alle 500 Meter) einer vorher gewählten Route in eine MySQL Datenbank.

Annahme:
Es sind aktuell die Koordinaten von sehr vielen Routen in der Datenbank eingetragen (50.000+ Koordinaten) .

Was ich möchte:
Ich möchte performant überprüfen, ob vorher gegebene Koordinaten im Radius von irgendeiner oder auch mehreren dieser Routen liegen.


Wie ich es aktuell löse:
Ich habe eine abfrage in etwa so: "Select RoutenID Von Tabelle(Routen) where Radius(meineGesuchteKoordinate) = WAHR"

Problem:
Ich Iteriere mit jeder abfrage durch die Kompette Datenbank und Checke ob meine gegebe Koordinate im Radius der gerade selectierten Koordinate lieget.

Ich denke das ist bei einer riesigen Anzahl von Koordinaten nicht gerade sehr performant.

Frage:
Welche Möglichkeiten habe ich, um nicht jedesmal die gesamte Datenbank zu durchsuchen ?
Ich dachte daran weitere Informationen jeder Koordinate einer Route (PLZ/Ort ...) mit in die Datenbank zu schreiben, um dann zb nur den Teil der Tabelle zu durchsuchen, der die gleiche PLZ hat wie die PLZ der gesuchten Koordinate ?

Wäre das eine adequate Lösung ? Was habe ich noch für Möglichkeiten.

Ich hoffe mir kann jemand helfen.

Vielen Dank,

Grüße
 
wenn auf den Koordinaten ein Index liegt
könntest Du doch den Radius der gegebenen
ausrechnen und dann in der Where-Condition
nur die Grenzen angeben.
Das wäre dann zwar kein wirklicher Radius mehr
sondern nur das Rechteck um den gegebenen
Punkt aber zumindest eine erste Näherung und
kein Table-Scan mehr.
Der Index sollte doch aus nur zwei Werten bestehen.
In MySQL kannst Du einen Index über zwei Spalten
legen. Dafür würde sich der Primär-Index anbieten.

Nachteil wäre natürlich das ständige Einfügen, was
nicht sonderlich schnell dann sein dürfte, da der
komplette Index neu geschrieben wird, was bedeutet
das die komplette Tabelle u.U. geschrieben wird wenn
es der Primärindex ist und am Anfang eingefügt wird.
 
Zurück
Oben Unten