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);