summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2017-02-04 10:20:39 -0800
committerStan Hu <stanhu@gmail.com>2017-02-04 10:22:32 -0800
commit1e97a6df24f66f70811fdd4b1412432e40ab8ebe (patch)
tree94dbb71bf6e0c8c8ec5a2a2adeefd4a5787c7329
parent8a333d45059688bfd5245eb91f206bbbcf7d18eb (diff)
downloadgitlab-ce-sh-add-index-for-label-count.tar.gz
Add index to labels for `type` and project_id`sh-add-index-for-label-count
When loading pages that display the number of open issues, the backend runs a query such as: ```sql SELECT "labels"."id" FROM "labels" WHERE "labels"."type" IN ('ProjectLabel') AND "labels"."project_id" = 1000 ``` This results in an entire scan of the `labels` table. To optimize performance, add the appropriate index to the table. Closes #27676
-rw-r--r--db/migrate/20170204181513_add_index_to_labels_for_type_and_project.rb11
-rw-r--r--db/schema.rb3
2 files changed, 13 insertions, 1 deletions
diff --git a/db/migrate/20170204181513_add_index_to_labels_for_type_and_project.rb b/db/migrate/20170204181513_add_index_to_labels_for_type_and_project.rb
new file mode 100644
index 00000000000..8f944930807
--- /dev/null
+++ b/db/migrate/20170204181513_add_index_to_labels_for_type_and_project.rb
@@ -0,0 +1,11 @@
+class AddIndexToLabelsForTypeAndProject < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def change
+ add_concurrent_index :labels, [:type, :project_id]
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index c73c311ccb2..92b36218a15 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20170130204620) do
+ActiveRecord::Schema.define(version: 20170204181513) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -576,6 +576,7 @@ ActiveRecord::Schema.define(version: 20170130204620) do
end
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", ["type", "project_id"], name: "index_labels_on_type_and_project_id", using: :btree
create_table "lfs_objects", force: :cascade do |t|
t.string "oid", null: false