This project is archived and is in readonly mode.

#542 ✓stale
Lawrence Pit

Calculation queries do not take eager loading into account

Reported by Lawrence Pit | July 3rd, 2008 @ 07:20 AM | in 2.x

When :include is used with a find (or defined within a scope), like for example:

  Project.scoped({:include => categories}).find(:limit => 15)

then execution of this results in e.g. these queries:

Project Load (0.005413)   SELECT projects.id, title FROM `projects` LIMIT 0, 15

Category Load (0.003505)   SELECT `categories`.*, t0.project_id as _parent_record_id FROM `categories` INNER JOIN `categories_projects` as t0 ON `categories`.id = t0.category_id WHERE (t0.project_id IN (1298,1275,1274,1273,1270,1269,1264,1261,1260,1259,1258,1257,1256,1254,1253))  

So far so good.

However, when a count is executed on the same scope, the query is like:

SQL (0.013835)   SELECT count(DISTINCT `projects`.id) AS count_all FROM `projects` LEFT OUTER JOIN `categories_projects` ON `categories_projects`.project_id = `projects`.id LEFT OUTER JOIN `categories` ON `categories`.id = `categories_projects`.category_id

I expected, based on the first "Project Load" query executed:

SELECT count(DISTINCT `projects`.id) AS count_all FROM `projects`

which should perform a lot better.

Comments and changes to this ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

<h2 style="font-size: 14px">Tickets have moved to Github</h2>

The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>

People watching this ticket

Pages