From dd0ee3dd727ab07760a4d337dd750085d485e99c Mon Sep 17 00:00:00 2001 From: rhymes Date: Mon, 25 Jan 2021 17:02:06 +0100 Subject: [PATCH] Optimize Admin::FeedbackMessagesController by adding proper indexes (#12415) DEV has 30+ million email messages, to display some of them to the admin, they all are scanned to find those that belong to the requested feedback messages. This results in SQL queries that can take up to 15 seconds. By adding an index, we cut the SQL response time to milliseconds. --- ...es_feedback_message_id_and_feedback_messages_status.rb | 8 ++++++++ db/schema.rb | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210125085442_add_indexes_to_ahoy_messages_feedback_message_id_and_feedback_messages_status.rb diff --git a/db/migrate/20210125085442_add_indexes_to_ahoy_messages_feedback_message_id_and_feedback_messages_status.rb b/db/migrate/20210125085442_add_indexes_to_ahoy_messages_feedback_message_id_and_feedback_messages_status.rb new file mode 100644 index 000000000..728c193fb --- /dev/null +++ b/db/migrate/20210125085442_add_indexes_to_ahoy_messages_feedback_message_id_and_feedback_messages_status.rb @@ -0,0 +1,8 @@ +class AddIndexesToAhoyMessagesFeedbackMessageIdAndFeedbackMessagesStatus < ActiveRecord::Migration[6.0] + disable_ddl_transaction! + + def change + add_index :ahoy_messages, :feedback_message_id, algorithm: :concurrently + add_index :feedback_messages, :status, algorithm: :concurrently + end +end diff --git a/db/schema.rb b/db/schema.rb index cf47b1cfd..8e391ee97 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: 2021_01_21_102114) do +ActiveRecord::Schema.define(version: 2021_01_25_085442) do # These are extensions that must be enabled in order to support this database enable_extension "citext" @@ -46,6 +46,7 @@ ActiveRecord::Schema.define(version: 2021_01_21_102114) do t.string "utm_medium" t.string "utm_source" t.string "utm_term" + t.index ["feedback_message_id"], name: "index_ahoy_messages_on_feedback_message_id" t.index ["to"], name: "index_ahoy_messages_on_to" t.index ["token"], name: "index_ahoy_messages_on_token" t.index ["user_id", "mailer"], name: "index_ahoy_messages_on_user_id_and_mailer" @@ -511,6 +512,7 @@ ActiveRecord::Schema.define(version: 2021_01_21_102114) do t.index ["affected_id"], name: "index_feedback_messages_on_affected_id" t.index ["offender_id"], name: "index_feedback_messages_on_offender_id" t.index ["reporter_id"], name: "index_feedback_messages_on_reporter_id" + t.index ["status"], name: "index_feedback_messages_on_status" end create_table "field_test_events", force: :cascade do |t|