在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