テーブル(cosn1)の各行について、同じクラスの最も近いポリゴンまでの距離を計算するために、Postgis 2.0の新しい関数<->(ジオメトリ距離重心)を使用しようとしています。
私は次のコードを使用しようとしました:
WITH index_query AS (
SELECT g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, g1.the_geom <-> g2.the_geom)
SELECT DISTINCT ON (ref_gid) ref_gid, ENN
FROM index_query
ORDER BY ref_gid, ENN;
しかし、私は警告を実現します:
注:インデックスは、ジオメトリの1つが定数(サブクエリ/ cteではない)である場合にのみ有効です。例: 'SRID = 3005; POINT(1011102 450541)' :: geometryではなくa.geom
つまり、インデックスはまったく使用されず、クエリは使用前とほぼ同じ時間がかかります:
SELECT DISTINCT ON(g1.gid) g1.gid As ref_gid, ST_Distance(g1.the_geom,g2.the_geom) As ENN
FROM "cosn1" As g1, "cosn1" As g2
WHERE g1.gid <> g2.gid AND g1.class = g2.class
ORDER BY g1.gid, ST_Distance(g1.the_geom,g2.the_geom)
誰かが私のクエリのパフォーマンスを改善できる回避策を教えてもらえますか?
どうもありがとうございました。