PERF: Simplify query of UserStat#update_topic_reply_count.

For a user with alot of posts, we get a 25% speed up.
This commit is contained in:
Guo Xiang Tan 2019-04-08 17:46:49 +08:00
parent f524f8f811
commit f0f3deb32b

View File

@ -130,13 +130,9 @@ class UserStat < ActiveRecord::Base
def update_topic_reply_count
self.topic_reply_count =
Topic
.where(['id in (
SELECT topic_id FROM posts p
JOIN topics t2 ON t2.id = p.topic_id
WHERE p.deleted_at IS NULL AND
t2.user_id <> p.user_id AND
p.user_id = ?
)', self.user_id])
.joins("INNER JOIN posts ON topics.id = posts.topic_id AND topics.user_id <> posts.user_id")
.where("posts.deleted_at IS NULL AND posts.user_id = ?", self.user_id)
.distinct
.count
end