diff options
-rw-r--r-- | changelogs/unreleased/ab-partial-events-index.yml | 5 | ||||
-rw-r--r-- | db/migrate/20190910103144_replace_events_index_on_group_id_with_partial_index.rb | 19 | ||||
-rw-r--r-- | db/schema.rb | 2 |
3 files changed, 25 insertions, 1 deletions
diff --git a/changelogs/unreleased/ab-partial-events-index.yml b/changelogs/unreleased/ab-partial-events-index.yml new file mode 100644 index 00000000000..f68b0862c6b --- /dev/null +++ b/changelogs/unreleased/ab-partial-events-index.yml @@ -0,0 +1,5 @@ +--- +title: Replace events index with partial one +merge_request: 32874 +author: +type: performance diff --git a/db/migrate/20190910103144_replace_events_index_on_group_id_with_partial_index.rb b/db/migrate/20190910103144_replace_events_index_on_group_id_with_partial_index.rb new file mode 100644 index 00000000000..40a7454fd20 --- /dev/null +++ b/db/migrate/20190910103144_replace_events_index_on_group_id_with_partial_index.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class ReplaceEventsIndexOnGroupIdWithPartialIndex < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_concurrent_index(:events, :group_id, where: 'group_id IS NOT NULL', name: 'index_events_on_group_id_partial') + remove_concurrent_index_by_name(:events, 'index_events_on_group_id') + end + + def down + add_concurrent_index(:events, :group_id, name: 'index_events_on_group_id') + remove_concurrent_index_by_name(:events, 'index_events_on_group_id_partial') + end +end diff --git a/db/schema.rb b/db/schema.rb index 39faf1e651e..71249a1e56c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1321,7 +1321,7 @@ ActiveRecord::Schema.define(version: 2019_09_12_061145) do t.index ["action"], name: "index_events_on_action" t.index ["author_id", "project_id"], name: "index_events_on_author_id_and_project_id" t.index ["created_at", "author_id"], name: "analytics_index_events_on_created_at_and_author_id" - t.index ["group_id"], name: "index_events_on_group_id" + t.index ["group_id"], name: "index_events_on_group_id_partial", where: "(group_id IS NOT NULL)" t.index ["project_id", "created_at"], name: "index_events_on_project_id_and_created_at" t.index ["project_id", "id"], name: "index_events_on_project_id_and_id" t.index ["target_type", "target_id"], name: "index_events_on_target_type_and_target_id" |