0

我有一个查询,它创建了一个pgRouting pgr_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有几十条记录。

有什么方法可以增强这个查询吗?

4

1 回答 1

0

推荐使用JOIN语法连接表的方法。然后再限制给定的集合机智WHERE。ST_MakeEnvelope 是什么?您可以在 PostgreSQL 中使用
表达式索引;) PostgreSQL 中的表达式索引

由于您正在使用表达式,因此您可能会从中受益。
您可能会使用Explain analyize来注意查询中的瓶颈

于 2014-11-10T09:43:33.917 回答