summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>2014-05-19 21:17:55 +0000
committerJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>2014-05-19 21:17:55 +0000
commit1914d1a15984d5f255d76ba3d40e52b290c03a83 (patch)
treefcca4b8ac000794f486a169ca1e014d68ab509c2
parenteaac0eff082e14fe5b87f1c9c2845e4077e1fbed (diff)
downloadredmine-1914d1a15984d5f255d76ba3d40e52b290c03a83.tar.gz
redmine-1914d1a15984d5f255d76ba3d40e52b290c03a83.zip
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
-rw-r--r--app/models/principal.rb2
1 files changed, 1 insertions, 1 deletions
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