ฉันพยายามใช้ฟังก์ชันใหม่ของ Postgis 2.0 <-> (Geometry Distance Centroid) เพื่อคำนวณสำหรับแต่ละแถวของตาราง (cosn1) ระยะทางของรูปหลายเหลี่ยมที่ใกล้เคียงที่สุดของชั้นเดียวกัน
ฉันพยายามใช้รหัสต่อไปนี้:
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;
แต่ฉันก็ตระหนักถึงคำเตือน:
หมายเหตุ: ดัชนีจะเริ่มขึ้นก็ต่อเมื่อหนึ่งในรูปทรงเรขาคณิตเป็นค่าคงที่ (ไม่ใช่ในแบบสอบถามย่อย / cte) เช่น 'SRID = 3005; POINT (1011102 450541)' :: รูปทรงเรขาคณิตแทน 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)
ใครช่วยชี้วิธีแก้ปัญหาให้ฉันเพื่อปรับปรุงประสิทธิภาพการสืบค้นของฉันได้บ้าง
ขอบคุณมาก.