Minor performance improvement - Replace count by exists?
|Assignee:||Jean-Philippe Lang||% Done:|
When checking to see if a query returns any records, we should use the ActiveRecord
exists? method instead of
Here is an example in the
diff --git a/app/views/versions/show.html.erb b/app/views/versions/show.html.erb index 82bd572..fc22a9f 100644 --- a/app/views/versions/show.html.erb +++ b/app/views/versions/show.html.erb @@ -32,7 +32,7 @@ <% end %> <div id="status_by"> -<%= render_issue_status_by(@version, params[:status_by]) if @version.fixed_issues.count > 0 %> +<%= render_issue_status_by(@version, params[:status_by]) if @version.fixed_issues.exists? %> </div> </div>
If we compare the generated queries with PostgreSQL:
SELECT 1 AS one FROM "issues" WHERE "issues"."fixed_version_id" = ??? LIMIT 1;
should be faster than
SELECT COUNT(*) FROM "issues" WHERE "issues"."fixed_version_id" = ???;
#1 Updated by Go MAEDA almost 4 years ago
- File use-exists-instead-of-count.diff added
Thank you for the patch.
I found three more
count which can be replaced with
exists?. This is an updated patch: use-exists-instead-of-count.diff
.count > 0 can be found in
app/views/imports/show.html.erb too, I have not changed because of cache efficiency (exactly the same query will be performed just after them).