[Talk-de] PostGIS vs. MySQL
Frederik Ramm
frederik at remote.org
Mo Jan 18 10:10:00 UTC 2010
Hallo,
Bernd Wurst wrote:
> Ich meine, bei den Projekten von denen wir hier reden ist eine Abfrage
> WHERE lat BETWEEN 50.1 AND 50.2 AND lon BETWEEN 10.1 AND 10.2
> völlig gleichwertig zu deiner Bounding-Box-Geometrie. Ob das jetzt Fehler im
> Meter- oder je nach Größe im niedrigen Kilometer-Bereich hat, ist doch Jacke
> wie Hose bei den Dingen hier.
Ich weiss nicht, ob ihr da nicht aneinander vorbeiredet:
> Wie gesagt, ich würde aus Performance-Gründen noch z.B. zwei zusätzliche,
> indizierte Spalten mit int(lat*100) und int(lon*100) anlegen um nur noch
> Ganzzahlen zum Vergleich zu benutzen.
Bei deinem Beispiel (where lat... and lon...) wird MySQL immer nur einen
der beiden Indizes nutzen, und auf der anderen Spalte ist dann table
scan angesagt. OSM hatte ja lange Zeit selbst MySQL in Betrieb und hat
dafuer praktisch von Hand einen zweidimensionalen Index nachgebaut,
indem zu jedem Koordinatenpaar ein "tile"-Wert errechnet wurde, und auf
diesen wurde dann indiziert; eine Abfrage sah dann so aus:
... where tile in (riesenliste) and lat ... and lon ...
dadurch wurde mit dem "tile" vorgefiltert und dann mit lat/lon die
Detailauswahl getroffen.
Ulkigerweise wird diese Methode auch jetzt, nach dem Wechsel auf
Postgres, beibehalten, obwohl man dort (auch ohne PostGIS) einen
zweidimensionalen Index zur Verfuegung haette.
Bye
Frederik
Mehr Informationen über die Mailingliste Talk-de