From 1914d1a15984d5f255d76ba3d40e52b290c03a83 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Mon, 19 May 2014 21:17:55 +0000 Subject: Improve performance of Principal.member_of scope The 'join' turns to be slow for large numbers of members (>20k). Using a sub-query like in Principal.not_member_of is more efficient and performance is the same for smaller values. git-svn-id: http://svn.redmine.org/redmine/trunk@13139 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/principal.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models') diff --git a/app/models/principal.rb b/app/models/principal.rb index ea4b00fcb..451349df2 100644 --- a/app/models/principal.rb +++ b/app/models/principal.rb @@ -61,7 +61,7 @@ class Principal < ActiveRecord::Base where("1=0") else ids = projects.map(&:id) - active.uniq.joins(:members).where("#{Member.table_name}.project_id IN (?)", ids) + active.where("#{Principal.table_name}.id IN (SELECT DISTINCT user_id FROM #{Member.table_name} WHERE project_id IN (?))", ids) end } # Principals that are not members of projects -- cgit v1.2.3