PERF: Replace posts reply_to_post_number index (#26385)

post_number is a sequence per topic, so it doesn't make sense to have an
index on only reply_to_post_number without also including the topic_id.
This commit is contained in:
Daniel Waterworth 2024-03-26 20:56:29 -05:00 committed by GitHub
parent 957b945d25
commit cc8f0a79e2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 1 deletions

View File

@ -1353,10 +1353,10 @@ end
# index_posts_on_id_and_baked_version (id DESC,baked_version) WHERE (deleted_at IS NULL)
# index_posts_on_id_topic_id_where_not_deleted_or_empty (id,topic_id) WHERE ((deleted_at IS NULL) AND (raw <> ''::text))
# index_posts_on_image_upload_id (image_upload_id)
# index_posts_on_reply_to_post_number (reply_to_post_number)
# index_posts_on_topic_id_and_created_at (topic_id,created_at)
# index_posts_on_topic_id_and_percent_rank (topic_id,percent_rank)
# index_posts_on_topic_id_and_post_number (topic_id,post_number) UNIQUE
# index_posts_on_topic_id_and_reply_to_post_number (topic_id,reply_to_post_number)
# index_posts_on_topic_id_and_sort_order (topic_id,sort_order)
# index_posts_on_user_id_and_created_at (user_id,created_at)
# index_posts_user_and_likes (user_id,like_count DESC,created_at DESC) WHERE (post_number > 1)

View File

@ -0,0 +1,35 @@
# frozen_string_literal: true
class ReplacePostReplyIndex < ActiveRecord::Migration[7.0]
disable_ddl_transaction!
def up
execute <<~SQL
DROP INDEX CONCURRENTLY IF EXISTS "index_posts_on_topic_id_and_reply_to_post_number"
SQL
execute <<~SQL
CREATE INDEX CONCURRENTLY IF NOT EXISTS "index_posts_on_topic_id_and_reply_to_post_number"
ON "posts" ("topic_id", "reply_to_post_number")
SQL
execute <<~SQL
DROP INDEX CONCURRENTLY IF EXISTS "index_posts_on_reply_to_post_number"
SQL
end
def down
execute <<~SQL
DROP INDEX CONCURRENTLY IF EXISTS "index_posts_on_reply_to_post_number"
SQL
execute <<~SQL
CREATE INDEX CONCURRENTLY IF NOT EXISTS "index_posts_on_reply_to_post_number"
ON "posts" ("reply_to_post_number")
SQL
execute <<~SQL
DROP INDEX CONCURRENTLY IF EXISTS "index_posts_on_topic_id_and_reply_to_post_number"
SQL
end
end