2012-04-10 47 views
3

最近我一直在使用postgis,在我的查询中,如果我使用ST_GeomFromText,它的执行速度要快于运行子查询来获取geom。ST_GeomFromText比提供直接几何更好吗?

我以为ST_GeomFromText会更昂贵,但每次运行很多测试后,我的结果更快,我的问题是否有任何解释背后呢? ,因为对于我直接在子查询中获取geom优于获取geom作为文本,然后添加为GeomFromText。

感谢, 萨拉

回答

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(....)在查询中指定。