summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-08-05 06:42:49 -0700
committerStan Hu <stanhu@gmail.com>2019-08-05 06:42:49 -0700
commit344f07e9361008412b3c22f1bc5e56dc2924ada9 (patch)
treeeec0aeb0794e377f15c50129f5cca428f69f3f39
parentfbd5a6c6cc1e8541096e0118868a2d83a0d91996 (diff)
downloadgitlab-ce-344f07e9361008412b3c22f1bc5e56dc2924ada9.tar.gz
Add partial index for deploy keys
Per https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/31384, this appears to drop the runtime of the query from 1.2 ms (cold), 500ms (warm cache) to < 20 ms.
-rw-r--r--db/migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb23
-rw-r--r--db/schema.rb3
2 files changed, 25 insertions, 1 deletions
diff --git a/db/migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb b/db/migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb
new file mode 100644
index 00000000000..9b4d74b4bea
--- /dev/null
+++ b/db/migrate/20190802235445_add_index_on_id_and_type_and_public_to_keys.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+class AddIndexOnIdAndTypeAndPublicToKeys < ActiveRecord::Migration[5.2]
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ INDEX_NAME = "index_on_deploy_keys_id_and_type_and_public"
+
+ def up
+ add_concurrent_index(:keys,
+ [:id, :type],
+ where: "public = 't'",
+ unique: true,
+ name: INDEX_NAME)
+ end
+
+ def down
+ remove_concurrent_index_by_name(:keys, INDEX_NAME)
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index a9b7c1930e3..07e479dabc6 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2019_08_02_012622) do
+ActiveRecord::Schema.define(version: 2019_08_02_235445) do
# These are extensions that must be enabled in order to support this database
enable_extension "pg_trgm"
@@ -1770,6 +1770,7 @@ ActiveRecord::Schema.define(version: 2019_08_02_012622) do
t.boolean "public", default: false, null: false
t.datetime "last_used_at"
t.index ["fingerprint"], name: "index_keys_on_fingerprint", unique: true
+ t.index ["id", "type"], name: "index_on_deploy_keys_id_and_type_and_public", unique: true, where: "(public = true)"
t.index ["user_id"], name: "index_keys_on_user_id"
end