summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2017-10-03 13:50:52 +0000
committerYorick Peterse <yorickpeterse@gmail.com>2017-10-03 13:50:52 +0000
commitab968fd4653a21c58272159358a6964c055d2ba6 (patch)
tree95ec7bcada60d200e109db56ad21c16773d06e6f
parent00460a9d64cea87fc5887731dc35f4750b8f356d (diff)
parent3387df16c844dbedc5bbd91606e9cf08c54521ed (diff)
downloadgitlab-ce-ab968fd4653a21c58272159358a6964c055d2ba6.tar.gz
Merge branch 'add-labels-template-index' into 'master'
Add (partial) index on Labels.template See merge request gitlab-org/gitlab-ce!14530
-rw-r--r--changelogs/unreleased/add-labels-template-index.yml5
-rw-r--r--db/migrate/20170927122209_add_partial_index_for_labels_template.rb45
-rw-r--r--db/schema.rb1
3 files changed, 51 insertions, 0 deletions
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 @@ ActiveRecord::Schema.define(version: 20170928100231) do
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