diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2018-07-02 10:48:35 +0000 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2018-07-02 10:48:35 +0000 |
commit | 7e9f46d0dc1ed34d7e7cb7b6ee31d08f53f2deaf (patch) | |
tree | 0f12619ccec2515a452bbd4b24ae89ea5783cfd6 | |
parent | f25cdea64d69a97f31719622f9dead3de1ea0e11 (diff) | |
parent | 29e2e1888b30883644ecbab6ca63c9415a6ea3ac (diff) | |
download | gitlab-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.rb | 2 | ||||
-rw-r--r-- | changelogs/unreleased/dm-user-without-projects-performance.yml | 5 |
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 |