From 3387df16c844dbedc5bbd91606e9cf08c54521ed Mon Sep 17 00:00:00 2001 From: Greg Stark Date: Wed, 27 Sep 2017 15:50:47 +0100 Subject: [PATCH] Add (partial) index on Labels.template --- .../unreleased/add-labels-template-index.yml | 5 +++ ...9_add_partial_index_for_labels_template.rb | 45 +++++++++++++++++++ db/schema.rb | 1 + 3 files changed, 51 insertions(+) create mode 100644 changelogs/unreleased/add-labels-template-index.yml create mode 100644 db/migrate/20170927122209_add_partial_index_for_labels_template.rb diff --git a/changelogs/unreleased/add-labels-template-index.yml b/changelogs/unreleased/add-labels-template-index.yml new file mode 100644 index 00000000000..5f66c4ce181 --- /dev/null +++ b/changelogs/unreleased/add-labels-template-index.yml @@ -0,0 +1,5 @@ +--- +title: Add (partial) index on Labels.template +merge_request: +author: +type: other diff --git a/db/migrate/20170927122209_add_partial_index_for_labels_template.rb b/db/migrate/20170927122209_add_partial_index_for_labels_template.rb new file mode 100644 index 00000000000..c3e5077ba20 --- /dev/null +++ b/db/migrate/20170927122209_add_partial_index_for_labels_template.rb @@ -0,0 +1,45 @@ +# See http://doc.gitlab.com/ce/development/migration_style_guide.html +# for more information on how to write migrations for GitLab. + +class AddPartialIndexForLabelsTemplate < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + # When a migration requires downtime you **must** uncomment the following + # constant and define a short and easy to understand explanation as to why the + # migration requires downtime. + # DOWNTIME_REASON = '' + + # When using the methods "add_concurrent_index", "remove_concurrent_index" or + # "add_column_with_default" you must disable the use of transactions + # as these methods can not run in an existing transaction. + # When using "add_concurrent_index" or "remove_concurrent_index" methods make sure + # that either of them is the _only_ method called in the migration, + # any other changes should go in a separate migration. + # This ensures that upon failure _only_ the index creation or removing fails + # and can be retried or reverted easily. + # + # To disable transactions uncomment the following line and remove these + # comments: + + disable_ddl_transaction! + + # Note this is a partial index in Postgres but MySQL will ignore the + # partial index clause. By making it an index on "template" this + # means the index will still accomplish the same goal of optimizing + # a query with "where template = true" on MySQL -- it'll just take + # more space. In this case the number of records with template=true + # is expected to be very small (small enough to display on a single + # web page) so it's ok to filter or sort them without the index + # anyways. + + def up + add_concurrent_index "labels", ["template"], where: "template" + end + + def down + remove_concurrent_index "labels", ["template"], where: "template" + end +end diff --git a/db/schema.rb b/db/schema.rb index c238efbedbe..d2e45c17426 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -730,6 +730,7 @@ add_index "labels", ["group_id", "project_id", "title"], name: "index_labels_on_group_id_and_project_id_and_title", unique: true, using: :btree add_index "labels", ["project_id"], name: "index_labels_on_project_id", using: :btree + add_index "labels", ["template"], name: "index_labels_on_template", where: "template", using: :btree add_index "labels", ["title"], name: "index_labels_on_title", using: :btree add_index "labels", ["type", "project_id"], name: "index_labels_on_type_and_project_id", using: :btree -- GitLab