从RoR查询postgreSQL比从提示慢?

时间:2012-06-18 14:05:26

标签: ruby-on-rails postgresql execution-time pgrouting

我正在以这种方式从我的ruby on rails应用程序查询postgreSQL数据库:

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 ms 327.8 ms

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

提前感谢任何想法。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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

此外,您尚未指出是否存在任何网络传输效应,如果存在网络差异,则通过线路返回的行数。

你还没有说过如何计算这些东西。如果时间包括Ruby案例中的客户端处理,那么在第二种情况下,显然处理较少,并且提示不包括将结果作为“执行时间”的一部分处理到显示中的传输时间或时间“它正在报告给你。