PostgreSQL ST_Intersect使用WITH和VALUES来动态坐标

时间:2018-08-09 17:56:47

标签: postgresql performance

我需要将特定点与多边形地图相交。 为此,我使用查询顶部的WITH语句定义变量。但是我注意到,如果我对POINT进行“硬编码”,查询将花费400毫秒,并且如果我使用WITH语句进行定义,则运行时间将增加到15秒。

有人可以帮我弄清楚为什么会这样吗?

这需要15秒

WITH 
     "my_variables" (v_gps) AS
     (VALUES ('-9.167162 38.738757'))

    SELECT
        DISTINCT ON ("11_map_all_shp".map_id)
        "11_map_all_shp".map_id,
        "11_map_all_shp".geom
    FROM
        "11_map_all_shp",
        "my_variables"
    WHERE
        ST_Intersects(geom, ST_GeomFromText('POINT(' || v_gps || ')',4326)) 
    ORDER BY
        "11_map_all_shp".map_id ASC,
        "11_map_all_shp".precedence ASC

这需要400毫秒

    SELECT
        DISTINCT ON ("11_map_all_shp".map_id)
        "11_map_all_shp".map_id,
        "11_map_all_shp".geom
    FROM
        "11_map_all_shp"
    WHERE
        ST_Intersects(geom, ST_GeomFromText('POINT(-9.167162 38.738757)',4326)) 
    ORDER BY
        "11_map_all_shp".map_id ASC,
        "11_map_all_shp".precedence ASC

0 个答案:

没有答案