2012-04-10 12 views
3

Ich habe vor kurzem mit Postgis gearbeitet, und in meiner Abfrage, wenn ich ST_GeomFromText verwenden, wird es schneller ausgeführt, als eine Unterabfrage auszuführen, um geom zu erhalten.Ist ST_GeomFromText besser als direkte Geometrie?

Ich dachte, dass ST_GeomFromText teurer sein wird, aber nach vielen Tests jedes Mal, wenn ich das Ergebnis schneller bekam, meine Frage Gibt es eine Erklärung dafür? weil für mich das geom direkt in Unterabfrage ist besser als Getom als Text dann als GeomFromText hinzugefügt.

Danke, Sara

Antwort

1

Ihr Problem ist, dass die Probleme unterschiedlich sind. ST_GeomFromText wird eine unveränderbare Funktion sein, so dass die Ausgabe nur von der Eingabe abhängt. Dies bedeutet, dass der Planer sie zu Beginn der Abfrage einmal ausführen kann. Das Ausführen einer Unterabfrage bedeutet, dass Sie die Geometrie nachschlagen müssen, was Festplattenzugriff usw. bedeutet. In der ersten Phase haben Sie ein wenig CPU-Aktivität, die einmal für die Abfrage ausgeführt wird, und auf der zweiten Seite haben Sie Nachschlagevorgänge.

So hängt die Antwort in gewissem Maße davon ab, was Sie damit machen. Im Allgemeinen können Sie davon ausgehen, dass der Optimierer Dinge wie Typkonvertierungen bei der Eingabe, bei denen diese nicht von den Einstellungen abhängig sind, ziemlich gut verarbeiten kann.

Denken Sie darüber nach.

SELECT * FROM mytable WHERE my_geom = ST_GeomFromText(....); 

Dies wird in etwa wie folgt Pseudo-Code umgewandelt:

private_geom = ST_GeomFromText(....); 
SELECT * FROM mytable WHERE my_geom = private_geom; 

Dann wird die Abfrage geplant und ausgeführt.

Offensichtlich möchten Sie keine Rundreisen hinzufügen, um Abfragen in Abfragen zu vermeiden, aber wo Sie die Geometrie kennen, können Sie sie auch über ST_GeomFromText(....) in Ihrer Abfrage angeben.

Verwandte Themen