FIX: Further optimize mentioning groups in chat messages (part 2) (#24185)
This is a follow-up toe6299a3
. I additionally fixed these three things: 1. Sincee6299a3
there's no need anymore to join the group_users table when looking for users who were reached by a group mention, so I removed that join in that commit. But turned out we were joining the group_users table twice, so I removed the second join in this PR. That drastically speeded up my test query, from 6 sec to 0.26 sec. 2. We also were joining twice the user_chat_channel_memebership table, so I removed the second unnecessary join too. 3. We actually need to join the user_chat_channel_memebership table only in certain cases, and we don't need to do that for group mentions, so I fixed that too. As a result of these changes, time of my test query fall down from 6 sec to 0.001 sec. And the resulting SQL query now contains only one JOIN statement.
This commit is contained in:
parent
f4b12d762c
commit
a32fce9e1d
|
@ -89,7 +89,7 @@ module Chat
|
||||||
private
|
private
|
||||||
|
|
||||||
def channel_members
|
def channel_members
|
||||||
chat_users.where(
|
chat_users.includes(:user_chat_channel_memberships).where(
|
||||||
user_chat_channel_memberships: {
|
user_chat_channel_memberships: {
|
||||||
following: true,
|
following: true,
|
||||||
chat_channel_id: @message.chat_channel.id,
|
chat_channel_id: @message.chat_channel.id,
|
||||||
|
@ -98,13 +98,7 @@ module Chat
|
||||||
end
|
end
|
||||||
|
|
||||||
def chat_users
|
def chat_users
|
||||||
User
|
User.distinct.joins(:user_option).real.where(user_options: { chat_enabled: true })
|
||||||
.includes(:user_chat_channel_memberships, :group_users)
|
|
||||||
.distinct
|
|
||||||
.joins("LEFT OUTER JOIN user_chat_channel_memberships uccm ON uccm.user_id = users.id")
|
|
||||||
.joins(:user_option)
|
|
||||||
.real
|
|
||||||
.where(user_options: { chat_enabled: true })
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def mentionable_groups
|
def mentionable_groups
|
||||||
|
|
Loading…
Reference in New Issue