diff --git a/db/post_migrate/20240122092018_drop_index_from_ci_build_trace_metadata.rb b/db/post_migrate/20240122092018_drop_index_from_ci_build_trace_metadata.rb
new file mode 100644
index 0000000000000000000000000000000000000000..32f23b2e7dee6830096c8d0e6158a0f762dc3e52
--- /dev/null
+++ b/db/post_migrate/20240122092018_drop_index_from_ci_build_trace_metadata.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+class DropIndexFromCiBuildTraceMetadata < Gitlab::Database::Migration[2.2]
+  milestone '16.9'
+  disable_ddl_transaction!
+
+  INDEX_NAME = :index_ci_build_trace_metadata_on_trace_artifact_id
+  TABLE_NAME = :ci_build_trace_metadata
+
+  def up
+    remove_concurrent_index_by_name(TABLE_NAME, INDEX_NAME)
+  end
+
+  def down
+    add_concurrent_index(TABLE_NAME, :trace_artifact_id, name: INDEX_NAME)
+  end
+end
diff --git a/db/post_migrate/20240122092139_remove_fk_from_ci_build_trace_metadata_and_ci_job_artifacts.rb b/db/post_migrate/20240122092139_remove_fk_from_ci_build_trace_metadata_and_ci_job_artifacts.rb
new file mode 100644
index 0000000000000000000000000000000000000000..dcc3ef56f17e24e9fe8f6da0a943f50953b48345
--- /dev/null
+++ b/db/post_migrate/20240122092139_remove_fk_from_ci_build_trace_metadata_and_ci_job_artifacts.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+class RemoveFkFromCiBuildTraceMetadataAndCiJobArtifacts < Gitlab::Database::Migration[2.2]
+  milestone '16.9'
+  disable_ddl_transaction!
+
+  SOURCE_TABLE_NAME = :ci_build_trace_metadata
+  TARGET_TABLE_NAME = :ci_job_artifacts
+  COLUMN = :trace_artifact_id
+  TARGET_COLUMN = :id
+  FK_NAME = :fk_21d25cac1a
+
+  def up
+    with_lock_retries do
+      remove_foreign_key_if_exists(
+        SOURCE_TABLE_NAME,
+        TARGET_TABLE_NAME,
+        name: FK_NAME,
+        reverse_lock_order: true
+      )
+    end
+  end
+
+  def down
+    add_concurrent_foreign_key(
+      SOURCE_TABLE_NAME,
+      TARGET_TABLE_NAME,
+      column: COLUMN,
+      target_column: TARGET_COLUMN,
+      validate: true,
+      reverse_lock_order: true,
+      on_delete: :cascade,
+      name: FK_NAME
+    )
+  end
+end
diff --git a/db/schema_migrations/20240122092018 b/db/schema_migrations/20240122092018
new file mode 100644
index 0000000000000000000000000000000000000000..5cea288ffd89549c8b220aa6859a6dd2392eeda4
--- /dev/null
+++ b/db/schema_migrations/20240122092018
@@ -0,0 +1 @@
+943cb1f5cd218199a2c4b36f7073d42f6ec7ceace21311e8cbeb6026578db3e5
\ No newline at end of file
diff --git a/db/schema_migrations/20240122092139 b/db/schema_migrations/20240122092139
new file mode 100644
index 0000000000000000000000000000000000000000..9738f97816060b14e4753c55ba98105e7e370c73
--- /dev/null
+++ b/db/schema_migrations/20240122092139
@@ -0,0 +1 @@
+934bd0403c967d97ea8404fd14a4b6b6e4654570322d59482301bbb88c534a64
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 182e150704ea24ec176055f72df407638e0c49c6..5a0727370e6d04306b7227037d60634280c71c2e 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -32822,8 +32822,6 @@ CREATE INDEX index_ci_build_trace_chunks_on_partition_id_build_id ON ci_build_tr
 
 CREATE UNIQUE INDEX index_ci_build_trace_metadata_on_partition_id_build_id ON ci_build_trace_metadata USING btree (partition_id, build_id);
 
-CREATE INDEX index_ci_build_trace_metadata_on_trace_artifact_id ON ci_build_trace_metadata USING btree (trace_artifact_id);
-
 CREATE INDEX index_ci_build_trace_metadata_on_trace_artifact_id_partition_id ON ci_build_trace_metadata USING btree (trace_artifact_id, partition_id);
 
 CREATE INDEX p_ci_builds_metadata_build_id_idx ON ONLY p_ci_builds_metadata USING btree (build_id) WHERE (has_exposed_artifacts IS TRUE);
@@ -38220,9 +38218,6 @@ ALTER TABLE ONLY coverage_fuzzing_corpuses
 ALTER TABLE ONLY namespace_settings
     ADD CONSTRAINT fk_20cf0eb2f9 FOREIGN KEY (default_compliance_framework_id) REFERENCES compliance_management_frameworks(id) ON DELETE SET NULL;
 
-ALTER TABLE ONLY ci_build_trace_metadata
-    ADD CONSTRAINT fk_21d25cac1a FOREIGN KEY (trace_artifact_id) REFERENCES ci_job_artifacts(id) ON DELETE CASCADE;
-
 ALTER TABLE ONLY ci_build_trace_metadata
     ADD CONSTRAINT fk_21d25cac1a_p FOREIGN KEY (partition_id, trace_artifact_id) REFERENCES ci_job_artifacts(partition_id, id) ON UPDATE CASCADE ON DELETE CASCADE;
 
diff --git a/spec/support/helpers/database/duplicate_indexes.yml b/spec/support/helpers/database/duplicate_indexes.yml
index 29e1c1da245416b1f9429fa88e22961e201d4a35..7064ce0dcf6d863fa82608f5de7530524663193c 100644
--- a/spec/support/helpers/database/duplicate_indexes.yml
+++ b/spec/support/helpers/database/duplicate_indexes.yml
@@ -27,9 +27,6 @@ boards_epic_board_recent_visits:
 boards_epic_user_preferences:
   index_boards_epic_user_preferences_on_board_user_epic_unique:
     - index_boards_epic_user_preferences_on_board_id
-ci_build_trace_metadata:
-  index_ci_build_trace_metadata_on_trace_artifact_id:
-    - index_ci_build_trace_metadata_on_trace_artifact_id_partition_id
 ci_job_artifacts:
   index_ci_job_artifacts_on_id_project_id_and_created_at:
     - index_ci_job_artifacts_on_project_id