summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2018-07-02 10:48:35 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2018-07-02 10:48:35 +0000
commit7e9f46d0dc1ed34d7e7cb7b6ee31d08f53f2deaf (patch)
tree0f12619ccec2515a452bbd4b24ae89ea5783cfd6
parentf25cdea64d69a97f31719622f9dead3de1ea0e11 (diff)
parent29e2e1888b30883644ecbab6ca63c9415a6ea3ac (diff)
downloadgitlab-ce-7e9f46d0dc1ed34d7e7cb7b6ee31d08f53f2deaf.tar.gz
Merge branch 'dm-user-without-projects-performance' into 'master'
Improve performance of User.without_projects scope Closes #48577 See merge request gitlab-org/gitlab-ce!20264
-rw-r--r--app/models/user.rb2
-rw-r--r--changelogs/unreleased/dm-user-without-projects-performance.yml5
2 files changed, 6 insertions, 1 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 8e0dc91b2a7..48629c58490 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -244,7 +244,7 @@ class User < ActiveRecord::Base
scope :blocked, -> { with_states(:blocked, :ldap_blocked) }
scope :external, -> { where(external: true) }
scope :active, -> { with_state(:active).non_internal }
- scope :without_projects, -> { where('id NOT IN (SELECT DISTINCT(user_id) FROM members WHERE user_id IS NOT NULL AND requested_at IS NULL)') }
+ scope :without_projects, -> { joins('LEFT JOIN project_authorizations ON users.id = project_authorizations.user_id').where(project_authorizations: { user_id: nil }) }
scope :todo_authors, ->(user_id, state) { where(id: Todo.where(user_id: user_id, state: state).select(:author_id)) }
scope :order_recent_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'DESC')) }
scope :order_oldest_sign_in, -> { reorder(Gitlab::Database.nulls_last_order('current_sign_in_at', 'ASC')) }
diff --git a/changelogs/unreleased/dm-user-without-projects-performance.yml b/changelogs/unreleased/dm-user-without-projects-performance.yml
new file mode 100644
index 00000000000..e7fc0ae6d54
--- /dev/null
+++ b/changelogs/unreleased/dm-user-without-projects-performance.yml
@@ -0,0 +1,5 @@
+---
+title: Improve performance of listing users without projects
+merge_request:
+author:
+type: performance