Skip to content

Optimize MergeRequestDiff#last_commit_sha

Stan Hu requested to merge sh-optimize-last-commit-sha into master

The previous implementation would load all the MergeRequestDiffCommit entries into memory and retrieve the SHA from the latest entry. We can save a bit of database query time and memory by using the database to retrieve the first item from the database, particularly when there are many merge requests that need this information.

Seen while investigating Todo API performance in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/25711

The SQL query now has a LIMIT 1 instead:

Before

SELECT "merge_request_diff_commits".* FROM "merge_request_diff_commits" WHERE "merge_request_diff_commits"."merge_request_diff_id" = $1 ORDER BY "merge_request_diff_commits"."merge_request_diff_id" ASC, "merge_request_diff_commits"."relative_order" ASC

After

SELECT  "merge_request_diff_commits".* FROM "merge_request_diff_commits" WHERE "merge_request_diff_commits"."merge_request_diff_id" = 35499485 ORDER BY "merge_request_diff_commits"."merge_request_diff_id" ASC, "merge_request_diff_commits"."relative_order" ASC LIMIT 1
Edited by Stan Hu

Merge request reports