В действии контроллера 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))
Кажется, что каждый доступ к базе данных находится в диапазоне низких миллисекунд. Почему это так долго в итоге?