diff --git a/db/post_migrate/20230713234121_create_index_vulnerability_findings_on_uuid_sync.rb b/db/post_migrate/20230713234121_create_index_vulnerability_findings_on_uuid_sync.rb
new file mode 100644
index 0000000000000000000000000000000000000000..abbf2390b0d6e5f0c24bb6f8a422eb95d5f95e20
--- /dev/null
+++ b/db/post_migrate/20230713234121_create_index_vulnerability_findings_on_uuid_sync.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class CreateIndexVulnerabilityFindingsOnUuidSync < Gitlab::Database::Migration[2.1]
+  INDEX_NAME = 'index_vuln_findings_on_uuid_including_vuln_id'
+
+  disable_ddl_transaction!
+
+  def up
+    return if index_exists_by_name?(:vulnerability_occurrences, INDEX_NAME)
+
+    disable_statement_timeout do
+      execute <<~SQL
+        CREATE UNIQUE INDEX CONCURRENTLY #{INDEX_NAME} ON vulnerability_occurrences (uuid) include (vulnerability_id);
+      SQL
+    end
+  end
+
+  def down
+    remove_concurrent_index_by_name(:vulnerability_occurrences, INDEX_NAME)
+  end
+end
diff --git a/db/schema_migrations/20230713234121 b/db/schema_migrations/20230713234121
new file mode 100644
index 0000000000000000000000000000000000000000..84382d7cf7311fe00dee7cf0400f693dce810fc6
--- /dev/null
+++ b/db/schema_migrations/20230713234121
@@ -0,0 +1 @@
+8dd7e4a28417629324f904b20d16e67a0832a6a731c3e7095097dc632d93ca9d
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 340b8fdec799404cbb1c5861a9554d3c32c9c832..be6b9f355c53b5d5673d1293763f92b2291e7df5 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -33304,6 +33304,8 @@ CREATE UNIQUE INDEX index_verification_codes_on_phone_and_visitor_id_code ON ONL
 
 COMMENT ON INDEX index_verification_codes_on_phone_and_visitor_id_code IS 'JiHu-specific index';
 
+CREATE UNIQUE INDEX index_vuln_findings_on_uuid_including_vuln_id ON vulnerability_occurrences USING btree (uuid) INCLUDE (vulnerability_id);
+
 CREATE UNIQUE INDEX index_vuln_historical_statistics_on_project_id_and_date ON vulnerability_historical_statistics USING btree (project_id, date);
 
 CREATE INDEX index_vuln_reads_common_query_on_resolved_on_default_branch ON vulnerability_reads USING btree (project_id, state, report_type, vulnerability_id DESC) WHERE (resolved_on_default_branch IS TRUE);
diff --git a/ee/spec/models/vulnerabilities/finding_spec.rb b/ee/spec/models/vulnerabilities/finding_spec.rb
index bb21a93723f2f83da147c674695342de6af5bcf0..a26c0ef8cc726d8bc56feb419b4d74fb9b6c8739 100644
--- a/ee/spec/models/vulnerabilities/finding_spec.rb
+++ b/ee/spec/models/vulnerabilities/finding_spec.rb
@@ -7,7 +7,7 @@
   it { is_expected.to define_enum_for(:severity) }
   it { is_expected.to define_enum_for(:detection_method) }
 
-  it { is_expected.to have_locked_schema('b10c77716e35e1b63499af167373cfa2f43d9a0f919c934fe974b9c4ad492a15').reference('https://gitlab.com/gitlab-org/gitlab/-/issues/349315') }
+  it { is_expected.to have_locked_schema('0865cedff019ba2d3430a1e4354506034acc179fcdb2632efd645bb51c132eb8').reference('https://gitlab.com/gitlab-org/gitlab/-/issues/349315') }
 
   where(vulnerability_finding_signatures: [true, false])
   with_them do