在Rails控制器的动作我打电话慢找到包括多个关联
@grid = Grid.find(params[:id], :include => [:grid_properties, :grid_entities => [:entity => :properties]])
不幸的是它需要很长的。 Benchmark.realtime
(在开发模式下)告诉我1.8812830448150635
,所以大概2秒(Rails 3.0.7,Postgres 8.4)。
当在SQL日志我得到这行代码下面转向:
Grid Load (0.9ms) SELECT "grids".* FROM "grids" WHERE "grids"."id" = 2 LIMIT 1
GridProperty Load (2.5ms) SELECT "grid_properties".* FROM "grid_properties" WHERE ("grid_properties".grid_id = 2) ORDER BY row_order
GridEntity Load (1.3ms) SELECT "grid_entities".* FROM "grid_entities" WHERE ("grid_entities".grid_id = 2) ORDER BY row_order
Entity Load (3.0ms) SELECT "entities".* FROM "entities" WHERE ("entities"."id" IN (28,7,3,6,25,11,2,12))
Property Load (6.4ms) SELECT "properties".* FROM "properties" WHERE ("properties".entity_id IN (28,7,3,6,25,11,2,12))
每个数据库的访问似乎是在低毫秒范围内。为什么最后需要这么长时间?
“Benchmark.realtime”仅用于查询还是包含渲染部分和模板所需的时间? – Wukerplank 2011-05-20 10:33:36
就在上面找到。没有其他包含。 – Zardoz 2011-05-20 10:50:14