From c82a9290250f39e67acfed429e3888781447f720 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 9 Apr 2019 13:54:14 +0800 Subject: [PATCH] PERF: Add `index_for_rebake_old` to `posts`. The index becomes smaller over time and is much faster. Follow up to 4791d992dc484c8b81ec4250c65c097873e2f708. --- app/models/post.rb | 1 + ...54736_add_index_for_rebake_old_on_posts.rb | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 db/migrate/20190409054736_add_index_for_rebake_old_on_posts.rb diff --git a/app/models/post.rb b/app/models/post.rb index 019d5d47f54..b26510ce04d 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -20,6 +20,7 @@ class Post < ActiveRecord::Base self.plugin_permitted_create_params = {} # increase this number to force a system wide post rebake + # Recreate `index_for_rebake_old` when the number is increased # Version 1, was the initial version # Version 2 15-12-2017, introduces CommonMark and a huge number of onebox fixes BAKED_VERSION = 2 diff --git a/db/migrate/20190409054736_add_index_for_rebake_old_on_posts.rb b/db/migrate/20190409054736_add_index_for_rebake_old_on_posts.rb new file mode 100644 index 00000000000..74c79805f3f --- /dev/null +++ b/db/migrate/20190409054736_add_index_for_rebake_old_on_posts.rb @@ -0,0 +1,22 @@ +class AddIndexForRebakeOldOnPosts < ActiveRecord::Migration[5.2] + disable_ddl_transaction! + + def up + remove_index :posts, name: :index_posts_on_id_and_baked_version + + add_index :posts, :id, + order: { id: :desc }, + where: "(baked_version IS NULL OR baked_version < 2) AND deleted_at IS NULL", + name: :index_for_rebake_old, + algorithm: :concurrently + end + + def down + remove_index :posts, name: :index_for_rebake_old + + add_index :posts, [:id, :baked_version], + order: { id: :desc }, + where: "(deleted_at IS NULL)", + algorithm: :concurrently + end +end