diff --git a/changelogs/unreleased/issue_322686-improve_award_emoji_filtering_query.yml b/changelogs/unreleased/issue_322686-improve_award_emoji_filtering_query.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a7115072bf3ef2e658a0f091722da13c2105dff4
--- /dev/null
+++ b/changelogs/unreleased/issue_322686-improve_award_emoji_filtering_query.yml
@@ -0,0 +1,5 @@
+---
+title: Add composite index to support epic filtering by award emoji
+merge_request: 57759
+author:
+type: performance
diff --git a/db/migrate/20210329192716_add_composite_index_to_award_emoji.rb b/db/migrate/20210329192716_add_composite_index_to_award_emoji.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ce37afdbc29fb7e15c77508802c560345363ffac
--- /dev/null
+++ b/db/migrate/20210329192716_add_composite_index_to_award_emoji.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class AddCompositeIndexToAwardEmoji < ActiveRecord::Migration[6.0]
+  include Gitlab::Database::MigrationHelpers
+
+  DOWNTIME = false
+  INDEX_NAME = 'idx_award_emoji_on_user_emoji_name_awardable_type_awardable_id'
+
+  disable_ddl_transaction!
+
+  def up
+    add_concurrent_index :award_emoji, %i[user_id name awardable_type awardable_id], name: INDEX_NAME
+  end
+
+  def down
+    remove_concurrent_index_by_name :award_emoji, INDEX_NAME
+  end
+end
diff --git a/db/migrate/20210331180118_remove_deprecated_index_from_award_emoji.rb b/db/migrate/20210331180118_remove_deprecated_index_from_award_emoji.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b8787eb171ca84eb5a34d9151df867e1f9c4b0ca
--- /dev/null
+++ b/db/migrate/20210331180118_remove_deprecated_index_from_award_emoji.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class RemoveDeprecatedIndexFromAwardEmoji < ActiveRecord::Migration[6.0]
+  include Gitlab::Database::MigrationHelpers
+
+  DOWNTIME = false
+  INDEX_NAME = 'index_award_emoji_on_user_id_and_name'
+
+  disable_ddl_transaction!
+
+  def up
+    # Index deprecated in favor of idx_award_emoji_on_user_emoji_name_awardable_type_awardable_id
+    remove_concurrent_index_by_name(:award_emoji, INDEX_NAME)
+  end
+
+  def down
+    add_concurrent_index(:award_emoji, [:user_id, :name], name: INDEX_NAME)
+  end
+end
diff --git a/db/schema_migrations/20210329192716 b/db/schema_migrations/20210329192716
new file mode 100644
index 0000000000000000000000000000000000000000..8767c215335e07a13695e6934272e67f5058cf1e
--- /dev/null
+++ b/db/schema_migrations/20210329192716
@@ -0,0 +1 @@
+d0f5341d76183882b68583bc012154566e99050c24a90c9b895d6863ad8f3273
\ No newline at end of file
diff --git a/db/schema_migrations/20210331180118 b/db/schema_migrations/20210331180118
new file mode 100644
index 0000000000000000000000000000000000000000..45e62e7154d946a99c4037be0f7de7227727c75b
--- /dev/null
+++ b/db/schema_migrations/20210331180118
@@ -0,0 +1 @@
+d8a17ce963801559292265dd0a997d8dbc69d2fa8b8840622490f878bf1eaa6a
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index c1a2652ff124ad0815936590de77a92dfab72579..0db119308a1e4c36f1cc41494adf868b8843c7ab 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -21762,6 +21762,8 @@ CREATE INDEX idx_audit_events_on_entity_id_desc_author_id_created_at ON audit_ev
 
 CREATE INDEX idx_audit_events_part_on_entity_id_desc_author_id_created_at ON ONLY audit_events USING btree (entity_id, entity_type, id DESC, author_id, created_at);
 
+CREATE INDEX idx_award_emoji_on_user_emoji_name_awardable_type_awardable_id ON award_emoji USING btree (user_id, name, awardable_type, awardable_id);
+
 CREATE INDEX idx_ci_pipelines_artifacts_locked ON ci_pipelines USING btree (ci_ref_id, id) WHERE (locked = 1);
 
 CREATE INDEX idx_container_exp_policies_on_project_id_next_run_at_enabled ON container_expiration_policies USING btree (project_id, next_run_at, enabled);
@@ -22004,8 +22006,6 @@ CREATE INDEX index_authentication_events_on_user_id ON authentication_events USI
 
 CREATE INDEX index_award_emoji_on_awardable_type_and_awardable_id ON award_emoji USING btree (awardable_type, awardable_id);
 
-CREATE INDEX index_award_emoji_on_user_id_and_name ON award_emoji USING btree (user_id, name);
-
 CREATE UNIQUE INDEX index_aws_roles_on_role_external_id ON aws_roles USING btree (role_external_id);
 
 CREATE UNIQUE INDEX index_aws_roles_on_user_id ON aws_roles USING btree (user_id);