Create index for users.unconfirmed_email
This speeds up the following query: ```sql SELECT users.* FROM users WHERE users.unconfirmed_email = ? ORDER BY users.id ASC LIMIT 1 ``` Presumably, this is a query coming from Devise. Context is https://gitlab.com/gitlab-org/gitlab-ce/issues/66958.
This commit is contained in:
parent
21924175ea
commit
7a890ae9ba
3 changed files with 24 additions and 1 deletions
5
changelogs/unreleased/ab-unconfirmed-email-index.yml
Normal file
5
changelogs/unreleased/ab-unconfirmed-email-index.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Create index for users.unconfirmed_email
|
||||
merge_request: 32664
|
||||
author:
|
||||
type: performance
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddIndexOnUsersUnconfirmedEmail < ActiveRecord::Migration[5.2]
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_index :users, :unconfirmed_email, where: 'unconfirmed_email IS NOT NULL'
|
||||
end
|
||||
|
||||
def down
|
||||
remove_concurrent_index :users, :unconfirmed_email, where: 'unconfirmed_email IS NOT NULL'
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2019_09_02_160015) do
|
||||
ActiveRecord::Schema.define(version: 2019_09_04_173203) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pg_trgm"
|
||||
|
@ -3562,6 +3562,7 @@ ActiveRecord::Schema.define(version: 2019_09_02_160015) do
|
|||
t.index ["state"], name: "index_users_on_state"
|
||||
t.index ["state"], name: "index_users_on_state_and_internal", where: "(ghost IS NOT TRUE)"
|
||||
t.index ["state"], name: "index_users_on_state_and_internal_ee", where: "((ghost IS NOT TRUE) AND (bot_type IS NULL))"
|
||||
t.index ["unconfirmed_email"], name: "index_users_on_unconfirmed_email", where: "(unconfirmed_email IS NOT NULL)"
|
||||
t.index ["username"], name: "index_users_on_username"
|
||||
t.index ["username"], name: "index_users_on_username_trigram", opclass: :gin_trgm_ops, using: :gin
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue