2012-04-10 6 views
3

私は最近のPostGISで働いている、と私はST_GeomFromTextを使用している場合、私のクエリではGEOMを取得するには、サブクエリを実行するよりも高速に実行。直接ジオメトリを提供するよりもST_GeomFromTextが優れていますか?

私はST_GeomFromTextは、より高価になるだろうと思ったが、多くのテストに私は速い結果を得たすべての時間を実行した後、私の質問は、この背後にある任意の説明がありますか? 私はサブクエリで直接GEOMを取得するため、その後GeomFromTextとして追加されたテキストとしてGEOMを得るよりも優れているので。

おかげで、 サラ

答えて

1

あなたの問題は、問題が異なっていることです。 ST_GeomFromTextは不変関数なので、出力は入力のみに依存します。これは、プランナがクエリの最初に一度実行できることを意味します。サブクエリを実行すると、あなたが最初になど、ディスクアクセスを意味し、ジオメトリをルックアップするために持っている意味は、クエリのために一度実行CPUの活動を少し、持っている、第二に、あなたはディスクルックアップを持っています。

だから、ある程度の答えは、あなたがそれで何をしているかに依存します。一般に、オプティマイザは、入力に応じて型変換などの処理を行いますが、設定に依存しないものは非常にうまく処理されると見なすことができます。

はそれについてこのように考えてみてください。

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

これは、次の擬似コードのようなものに変換します:

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

次に、そのクエリが計画され、実行されます。

クエリの照合を避けるために往復を追加したくないのは明らかですが、ジオメトリを知っている場合はクエリ内でST_GeomFromText(....)で指定することもできます。

関連する問題