我讀過很多討論使用INNER JOIN vs WHERE的優點的帖子。我發現的所有解釋似乎都表明,INNER JOIN的偏好與可讀性有關的多於功能。但是,在應用這兩種方法重新計算幾何字段時,我在計算時間方面遇到了很大的差異。對於Geom字段Recalc是WHERE還是INNER JOIN首選?
在下面的例子中,point_geoms.point_within字段是相同的類型和SRID作爲「點」 .geom
例如的幾何類型字段,此WHERE版本幾乎立即運行於〜5K的所述子集記錄:
UPDATE "POINTS"
SET geom = point_geoms.point_within
FROM point_geoms
WHERE "POINTS"."POINT_ID" = point_geoms.point_id
雖然這INNER JOIN版本將只保留旋轉上和,甚至當記者問到只計算單排:
UPDATE "POINTS"
SET geom = p.point_within
FROM "POINTS" s
INNER JOIN point_geoms p
ON s."POINT_ID" = p.point_id
當我SEL ECT基於完全相同的INNER JOIN,它會相當快地返回子集中的所有〜5k條記錄。這使我更加困惑,因爲INNER JOIN更新只是旋轉着。當我解釋選擇版本時,它看起來像它只掃描point_geoms表中的〜5k行,但是當更新時它看起來像要掃描「POINTS」表中的所有〜1M +。
任何想法/解釋將不勝感激。也許我在這裏做了一些愚蠢的事情。無論哪種方式,真的想知道發生了什麼事情。先謝謝你!