1

我以这种方式从我的 ruby​​ on rails 应用程序中查询 postgreSQL DB:

var = Map.connection.execute("
SELECT * 
FROM shortest_path('SELECT * FROM japan WHERE japan.geom_way && ST_MakeEnvelope(139.68012, 35.63993, 139.71918, 35.66024)', 242945, 582735, false, false) 
JOIN japan ON edge_id = id;")

rails 服务器控制台中显示的执行时间为327.8 ms

我从 psql promtp 执行相同的查询:

SELECT * 
FROM shortest_path('SELECT * FROM japan WHERE japan.geom_way && ST_MakeEnvelope(139.68012, 35.63993, 139.71918, 35.66024)', 242945, 582735, false, false) 
JOIN japan ON edge_id = id;

执行时间为53.108 ms

我认为某些缓存可能是执行时间不同的原因,但是如果我尝试在 rails 应用程序中连续执行 2 次相同的查询,则 1 个查询的执行时间不会改变。例如:

var = Map.connection.execute("SELECT * FROM shortest_path('SELECT * FROM japan WHERE japan.geom_way && ST_MakeEnvelope(139.68012, 35.63993, 139.71918, 35.66024)', 242945, 582735, false, false) JOIN japan ON edge_id = id;") 
var = Map.connection.execute("SELECT * FROM shortest_path('SELECT * FROM japan WHERE japan.geom_way && ST_MakeEnvelope(139.68012, 35.63993, 139.71918, 35.66024)', 242945, 582735, false, false) JOIN japan ON edge_id = id;")

给出330.7 ms327.8 ms的执行时间。

由于这两个查询是相同的,我不应该期望 RoR 和提示中的执行时间相同吗?

提前感谢您的任何想法。

4

2 回答 2

1

看看http://www.depesz.com/2008/05/10/prepared-statements-gotcha/ - 也许原因是相似的?

于 2012-06-18T15:36:21.447 回答
0

一种是使用 Ruby,一种不是。

此外,您还没有指出是否存在任何网络传输影响,以及是否存在网络差异,通过线路返回了多少行。

你还没有说你是如何安排这些事情的。如果时间包括Ruby情况下的客户端处理,那么在第二种情况下,处理显然更少,并且提示不包括传输时间或将结果处理到显示器的时间作为“执行时间”的一部分“它正在向您报告。

于 2012-06-18T18:33:48.183 回答