diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 2fc6191e785f8fcad711e7d31409239abaa9eea2..6ea774470afb5c6554992aa28b11502a0c54ec0c 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -849,7 +849,10 @@ class MergeRequest < ActiveRecord::Base
   #
   def all_commit_shas
     if persisted?
-      merge_request_diffs.preload(:merge_request_diff_commits).flat_map(&:commit_shas).uniq
+      column_shas = MergeRequestDiffCommit.where(merge_request_diff: merge_request_diffs).pluck('DISTINCT(sha)')
+      serialised_shas = merge_request_diffs.where.not(st_commits: nil).flat_map(&:commit_shas)
+
+      (column_shas + serialised_shas).uniq
     elsif compare_commits
       compare_commits.to_a.reverse.map(&:id)
     else
diff --git a/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml b/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml
new file mode 100644
index 0000000000000000000000000000000000000000..00f55edc2b7350bb2daf50771ce34cf0d76209e5
--- /dev/null
+++ b/changelogs/unreleased/speed-up-merge-request-all-commits-shas.yml
@@ -0,0 +1,4 @@
+---
+title: Make loading new merge requests (those created after the 9.4 upgrade) faster
+merge_request:
+author:
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index ea405fabff01c7609c8d67fe2dafeeaae4e54dfb..1eadc28869f9ec0cc9d4442a3a7b0ab854181b5f 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -803,7 +803,7 @@ describe MergeRequest, models: true do
       shared_examples 'returning all SHA' do
         it 'returns all SHA from all merge_request_diffs' do
           expect(subject.merge_request_diffs.size).to eq(2)
-          expect(subject.all_commit_shas).to eq(all_commit_shas)
+          expect(subject.all_commit_shas).to match_array(all_commit_shas)
         end
       end