我最近一直在使用postgis,在我的查询中,如果我使用ST_GeomFromText,它执行的速度比运行子查询要快得多。
我认为ST_GeomFromText会更贵,但每次运行很多测试后我都会更快地得到结果,我的问题是否有任何解释? 因为对我来说,直接在子查询中获取geom比将geom作为文本然后添加为GeomFromText更好。
谢谢, 萨拉
答案 0 :(得分:1)
您的问题是问题不同。 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(....)
指定它。