[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