我最近一直在使用 postgis,在我的查询中,如果我使用 ST_GeomFromText,它的执行速度比运行子查询来获取 geom 更快。
我认为 ST_GeomFromText 会更贵,但是在每次我更快地获得结果时运行多次测试后,我的问题这背后有什么解释吗?因为对我来说,直接在子查询中获取 geom 比将 geom 作为文本然后添加为 GeomFromText 更好。
谢谢,萨拉
我最近一直在使用 postgis,在我的查询中,如果我使用 ST_GeomFromText,它的执行速度比运行子查询来获取 geom 更快。
我认为 ST_GeomFromText 会更贵,但是在每次我更快地获得结果时运行多次测试后,我的问题这背后有什么解释吗?因为对我来说,直接在子查询中获取 geom 比将 geom 作为文本然后添加为 GeomFromText 更好。
谢谢,萨拉
你的问题是问题不同。ST_GeomFromText 将是一个不可变函数,因此输出仅取决于输入。这意味着规划器可以在查询开始时执行一次。运行子查询意味着您必须查找几何,这意味着磁盘访问等。首先,您有一点 CPU 活动,为查询执行一次,然后您有磁盘查找。
所以答案在一定程度上取决于你用它做什么。通常,您可以假设优化器将处理诸如输入类型转换之类的事情,这些事情不依赖于设置,非常好。
这样想吧。
SELECT * FROM mytable WHERE my_geom = ST_GeomFromText(....);
这将转换为类似以下伪代码的内容:
private_geom = ST_GeomFromText(....);
SELECT * FROM mytable WHERE my_geom = private_geom;
然后该查询被计划和执行。
显然,您不想仅仅为了避免查询中的查找而添加往返行程,但是在您知道几何形状的情况下,您不妨ST_GeomFromText(....)
在查询中指定它。