我正在以这种方式从我的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和提示符中执行相同的时间吗?
提前感谢任何想法。
答案 0 :(得分:1)
答案 1 :(得分:0)
一个是使用Ruby,一个不是。
此外,您尚未指出是否存在任何网络传输效应,如果存在网络差异,则通过线路返回的行数。
你还没有说过如何计算这些东西。如果时间包括Ruby案例中的客户端处理,那么在第二种情况下,显然处理较少,并且提示不包括将结果作为“执行时间”的一部分处理到显示中的传输时间或时间“它正在报告给你。