3

私は最近postgisを使用しており、クエリでST_GeomFromTextを使用すると、サブクエリを実行してgeomを取得するよりも高速に実行されます。

ST_GeomFromText の方がコストがかかると思っていましたが、結果が速くなるたびに多くのテストを実行した後、私の質問はこれの背後に何か説明はありますか? 私にとっては、サブクエリで geom を直接取得する方が、geom をテキストとして取得してから GeomFromText として追加するよりも優れているためです。

ありがとう、サラ

4

1 に答える 1

1

あなたの問題は、問題が異なるということです。ST_GeomFromText は不変関数になるため、出力は入力のみに依存します。これは、プランナーがクエリの開始時に一度だけ実行できることを意味します。サブクエリを実行すると、ディスク アクセスなどを意味するジオメトリを検索する必要があることを意味します。最初に、クエリのために 1 回実行される少量の CPU アクティビティがあり、2 番目にディスク ルックアップがあります。

したがって、答えはある程度、それで何をしているかによって異なります。一般に、オプティマイザーは、設定に依存しない入力の型変換などを非常にうまく処理すると想定できます。

このように考えてみてください。

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

これは、次の疑似コードのようなものに変換されます。

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

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

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

于 2013-04-01T01:29:39.053 に答える