この方法で、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 msと327.8 msです。
2 つのクエリは同一であるため、RoR とプロンプトで同じ実行時間を期待すべきではありませんか?
ご意見ありがとうございます。