diff --git a/db/post_migrate/20240121161500_add_index_merge_request_metrics_on_merged_by_id_target_project_id_m_r_id.rb b/db/post_migrate/20240121161500_add_index_merge_request_metrics_on_merged_by_id_target_project_id_m_r_id.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7c14ccb58a2fda434092fa243d5cb5f402ffd2ca
--- /dev/null
+++ b/db/post_migrate/20240121161500_add_index_merge_request_metrics_on_merged_by_id_target_project_id_m_r_id.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class AddIndexMergeRequestMetricsOnMergedByIdTargetProjectIdMRId < Gitlab::Database::Migration[2.2]
+  disable_ddl_transaction!
+
+  milestone '16.9'
+
+  TABLE_NAME = :merge_request_metrics
+  INDEX_NAME = :idx_merge_request_metrics_on_merged_by_project_and_mr
+  INDEX_COLUMNS = %i[merged_by_id target_project_id merge_request_id]
+
+  DROP_INDEX_NAME = :index_merge_request_metrics_on_merged_by_id
+  DROP_INDEX_COLUMNS = %i[merged_by_id]
+
+  def up
+    add_concurrent_index TABLE_NAME, INDEX_COLUMNS, name: INDEX_NAME
+    # the existing index index_merge_request_metrics_on_merged_by_id is now redundant and should be removed
+    remove_concurrent_index TABLE_NAME, DROP_INDEX_COLUMNS, name: DROP_INDEX_NAME
+  end
+
+  def down
+    # recreate the existing index index_merge_request_metrics_on_merged_by_id
+    add_concurrent_index TABLE_NAME, DROP_INDEX_COLUMNS, name: DROP_INDEX_NAME
+    remove_concurrent_index TABLE_NAME, INDEX_COLUMNS, name: INDEX_NAME
+  end
+end
diff --git a/db/schema_migrations/20240121161500 b/db/schema_migrations/20240121161500
new file mode 100644
index 0000000000000000000000000000000000000000..baa5befef208d875f3cc3aa8c101568257f5bb9e
--- /dev/null
+++ b/db/schema_migrations/20240121161500
@@ -0,0 +1 @@
+b68d79dc51049d14368f10652b95d8bd4b8a9fa8df093d61a4b53c936103ee7a
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index f46c5208840a65929a72bbe77fde9a4651c763a4..191f050a815e2d003f646d78b84ac27d9ecb4d82 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -32380,6 +32380,8 @@ CREATE INDEX idx_members_created_at_user_id_invite_token ON members USING btree
 
 CREATE INDEX idx_members_on_user_and_source_and_source_type_and_member_role ON members USING btree (user_id, source_id, source_type, member_role_id);
 
+CREATE INDEX idx_merge_request_metrics_on_merged_by_project_and_mr ON merge_request_metrics USING btree (merged_by_id, target_project_id, merge_request_id);
+
 CREATE INDEX idx_merge_requests_on_id_and_merge_jid ON merge_requests USING btree (id, merge_jid) WHERE ((merge_jid IS NOT NULL) AND (state_id = 4));
 
 CREATE INDEX idx_merge_requests_on_merged_state ON merge_requests USING btree (id) WHERE (state_id = 3);
@@ -34348,8 +34350,6 @@ CREATE INDEX index_merge_request_metrics_on_merge_request_id_and_merged_at ON me
 
 CREATE INDEX index_merge_request_metrics_on_merged_at ON merge_request_metrics USING btree (merged_at);
 
-CREATE INDEX index_merge_request_metrics_on_merged_by_id ON merge_request_metrics USING btree (merged_by_id);
-
 CREATE INDEX index_merge_request_metrics_on_pipeline_id ON merge_request_metrics USING btree (pipeline_id);
 
 CREATE INDEX index_merge_request_review_llm_summaries_on_mr_diff_id ON merge_request_review_llm_summaries USING btree (merge_request_diff_id);