【发布时间】:2014-03-18 18:15:39
【问题描述】:
我正在尝试使用ST_SnapToGrid 然后GROUP BY 网格单元(x,y)。这是我首先做的:
SELECT
COUNT(*) AS n,
ST_X(ST_SnapToGrid(geom, 50)) AS x,
ST_Y(ST_SnapToGrid(geom, 50)) AS y
FROM points
GROUP BY x, y
我不想为x 和y 重新计算ST_SnapToGrid。所以我将其更改为使用子查询:
SELECT
COUNT(*) AS n,
ST_X(geom) AS x,
ST_Y(geom) AS y
FROM (
SELECT
ST_SnapToGrid(geom, 50) AS geom
FROM points
) AS tmp
GROUP BY x, y
但是当我运行EXPLAIN 时,这两个查询的执行计划完全相同:
GroupAggregate (...)
-> Sort (...)
Sort Key: (st_x(st_snaptogrid(points.geom, 0::double precision))), (st_y(st_snaptogrid(points.geom, 0::double precision)))
-> Seq Scan on points (...)
问题:PostgreSQL会复用ST_SnapToGrid()的结果值吗?
如果没有,有没有办法让它做到这一点?
【问题讨论】:
标签: sql postgresql postgis explain postgresql-performance