【发布时间】:2014-11-10 07:59:41
【问题描述】:
我有一个查询,它创建了pgRoutingpgr_drivingDistance 函数的输入:
CREATE TEMP TABLE tmp_edge AS
SELECT
e."Id" as id,
e."Source" as source,
e."Target" as target,
e."Length" / (1000*LEAST("Speed", "SpeedMin")/60) as cost
FROM "Edge" e,
"SpeedLimit" sl
WHERE sl."VehicleKindId" = 1
AND e.the_geom &&
ST_MakeEnvelope(
x1-(1000*GREATEST("Speed", "SpeedMax")/60)*13,
y1-(1000*GREATEST("Speed", "SpeedMax")/60)*13,
x1+(1000*GREATEST("Speed", "SpeedMax")/60)*13,
y1+(1000*GREATEST("Speed", "SpeedMax")/60)*13, 3857)
AND sl."RoadCategoryId" = e."CategoryId";
在WHERE 子句中,我多次计算同一事物以获得边界框坐标。
我尝试将计算放入FROM 部分并为计算列使用别名,但整个执行时间增加了两倍。
Edge 表很大(100 万),SpeedLimit 是几十条记录。
有什么方法可以增强这个查询吗?
【问题讨论】:
-
x1, y1 在这个查询中来自哪里。解释说明了什么?
标签: postgresql optimization postgis pgrouting