[Talk-de] Ersatz fuer Namefinder
Christof Amelunxen
christof.amelunxen at sbg.ac.at
Mo Apr 27 14:04:01 UTC 2009
Hi Marcus,
marcus.wolschon at googlemail.com wrote:
> On Mon, 27 Apr 2009 14:56:57 +0200, Christof Amelunxen
>>> Du selektierst ja nicht über alle Places eines type
>>> sondern nur die in einem maximalen sinnvollen Radius
>>> für diese Typ.
>>> Das sind im Normalfall 0, 1 oder vieleicht mal 2.
>> ...wenn du so selektierst wie von dir beschrieben ("SELECT
>> MIN(DISTANCE(X.location, Y.location)) AS distance...") dann
>> selektierst "du" zwar nur einen Datensatz, aber "die Datenbank"
> selektiert,
>> berechnet und sortiert intern trotzdem alles
>> und das dauert genauso lange ;-)
>
> Sie sollte zuerst den Index mit dem kleinsten CostFactor anwenden
> (also entweder den Vergleich auf "key" und "value" in Tag oder
> die Bounding-Box auf location). Eine gute Datenbank wird das
> Ergebniss mit dem zweiten Index weiter verkleinern können, eine
> weniger gute muss da schon anfangen alle Ergebnisse auf die weiteren
> Bedingungen hin zu testen.
Das Problem ist die aggregate function "MIN" in Kombination mit Distance(x,y), denn hierfür müssen zunächst einmal alle
Kombinationen ausgerechnet werden, da hilft dir auch kein räumlicher Index weiter, denn die werden bei dieser Abfrage
nicht benutzt (zumindest nicht bei PostGIS oder Oracle Spatial).
> Da eine Geodatenbank wohl sinnvoll einen Punkt oder einen Linestring
> nach Enthaltensein in einer Bounding-Box/in einem Kreis testen kann
> sehe ich hier kein Problem.
> (The details are left as an exercise to the reader.)
Deshalb mein Hinweis auf ST_DWithin statt MIN(Distance(x,y)), denn genau dafür ist die Funktion da. Mit Distance(x,y)
klappt das nicht und da wollte ich nur drauf hinweisen.
Grüße,
Christof
Mehr Informationen über die Mailingliste Talk-de