Lighthouse has a new layout. Prefer the old one? Return to the old layout, and switch back any time from the link at the top of each page.

This project is archived and is in readonly mode.

Calculation queries do not take eager loading into account

#542

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.

Reported by Lawrence Pit · July 3rd, 2008 @ 07:20 AM

State: stale
Milestone: 2.x
Assigned to: nobody
Importance: none

Activity

  1. josh
    josh
    • State changed from new to stale

    October 5th, 2008 @ 03:18 PM