假設我有三個表:PostGIS的空間查詢援助
- A.自治市(的MultiPolygon)
- B.郵編質心(點)
- C.用戶數據(點)
來自(C)的條目將(B)中的條目與FK(代碼)匹配。
我在尋找一種有效的方式來:用戶數據(C)的在使用城市ST_Contains
計數數(A)。
BUT
這裏是漁獲:
如果C中的條目是NULL(或匹配的其它條件)使用,如果存在使用FK B中的匹配條目!! !
目前我已經嘗試了各種圖案,雖然空間查詢& B和A &下,兩個都是亞秒,有一次我在一個查詢(目標)的結果是超過4secs添加它們放在一起
什麼,我已經試過樣品:
這是糟糕的(60+秒):
SELECT
A.*,
(SELECT FROM
(SELECT CASE WHEN C.GEOM IS NULL THEN B.GEOM ELSE C.GEOM END
FROM C LEFT JOIN B ON C.ID=B.ID) AS b
WHERE ST_CONTAINS(A.GEOM, b.GEOM)
) count
FROM
A
這是15秒:
SELECT
A.ID, ..., -- other A fields
COUNT(B.GEOM)
FROM
A,
(SELECT CASE WHEN C.GEOM IS NULL THEN B.GEOM ELSE C.GEOM END
FROM C LEFT JOIN B ON C.ID=B.ID) AS b
WHERE
ST_Contains(A.GEOM, b.GEOM)
GROUP BY
A.ID, ... -- other A fields
正如我所說
SELECT COUNT(*) FROM A LEFT JOIN B ON ST_Contains(A.GEOM, B.GEOM)
和
SELECT COUNT(*) FROM A LEFT JOIN C ON ST_Contains(A.GEOM, C.GEOM)
兩個第二下返回英寸
各項指標到位外鍵以及(B.ID = C.ID)
感謝
我應該指出的是,第一個查詢(60+秒)優於第二如果不需要CASE語句(即使用僅有B點) – George