This project is archived and is in readonly mode.
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
-
josh October 5th, 2008 @ 03:18 PM
- State changed from new to stale
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>