BigW Consortium Gitlab
This changes ProjectsFinder#init_collection so it no longer relies on a UNION. For example, to get starred projects of a user we used to run: SELECT projects.* FROM projects WHERE projects.pending_delete = 'f' AND ( projects.id IN ( SELECT projects.id FROM projects INNER JOIN users_star_projects ON users_star_projects.project_id = projects.id INNER JOIN project_authorizations ON projects.id = project_authorizations.project_id WHERE projects.pending_delete = 'f' AND project_authorizations.user_id = 1 AND users_star_projects.user_id = 1 UNION SELECT projects.id FROM projects INNER JOIN users_star_projects ON users_star_projects.project_id = projects.id WHERE projects.visibility_level IN (20, 10) AND users_star_projects.user_id = 1 ) ) ORDER BY projects.id DESC; With these changes the above query is turned into the following instead: SELECT projects.* FROM projects INNER JOIN users_star_projects ON users_star_projects.project_id = projects.id WHERE projects.pending_delete = 'f' AND ( EXISTS ( SELECT 1 FROM project_authorizations WHERE project_authorizations.user_id = 1 AND (project_id = projects.id) ) OR projects.visibility_level IN (20,10) ) AND users_star_projects.user_id = 1 ORDER BY projects.id DESC; This query in turn produces a better execution plan and takes less time, though the difference is only a few milliseconds (this however depends on the amount of data involved and additional conditions that may be added).
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
api/helpers | Loading commit data... | |
banzai | Loading commit data... | |
bitbucket | Loading commit data... | |
ci | Loading commit data... | |
constraints | Loading commit data... | |
container_registry | Loading commit data... | |
gitlab | Loading commit data... | |
json_web_token | Loading commit data... | |
mattermost | Loading commit data... | |
microsoft_teams | Loading commit data... | |
system_check | Loading commit data... | |
additional_email_headers_interceptor_spec.rb | Loading commit data... | |
disable_email_interceptor_spec.rb | Loading commit data... | |
event_filter_spec.rb | Loading commit data... | |
expand_variables_spec.rb | Loading commit data... | |
extracts_path_spec.rb | Loading commit data... | |
feature_spec.rb | Loading commit data... | |
file_size_validator_spec.rb | Loading commit data... | |
gitlab_spec.rb | Loading commit data... | |
repository_cache_spec.rb | Loading commit data... | |
system_check_spec.rb | Loading commit data... |