discourse/plugins/chat/app
Sam 83bed592e2
PERF: speed up chat channel and thread unread queries (#39398)
Rewrites the channel and thread unread queries to use a CTE that
picks the candidate set up front, followed by LATERAL subqueries
for each aggregate. The previous form used three correlated
subqueries that each re-joined the user's full membership lists,
and packed the unread predicate into a single OR-bag that forced
a sequential scan over every message past last_read_message_id.

The channel query now:
- Limits candidate channels in a CTE before aggregating.
- Splits unread_count into three additive, index-friendly pieces
  (standalone messages, thread original messages, and DM thread
  replies) instead of one OR branch.
- Pushes the muted check into a CASE on the outer row.

The thread query now:
- Orders candidate memberships by last_message_id and caps them
  at MAX_THREADS in the CTE, so recent threads always win.
- Derives unread and watched counts from a single aggregate
  switched by notification_level.
- Skips threads whose channel membership is missing.

Also adds a covering index on chat_messages(thread_id, id) INCLUDE
(user_id) WHERE deleted_at IS NULL to support the thread aggregates
as index-only scans, and adds specs for the orphaned-thread case
and the MAX_THREADS recency cap.

---

This gives this about 50x perf improvement in testing

---------

Co-authored-by: Martin Brennan <martin@discourse.org>
2026-04-22 14:57:56 +10:00
..
controllers/chat SECURITY: Respect group visibility in category chatables when accessed by a moderator 2026-03-31 15:12:45 +01:00
jobs FEATURE: Pin chat messages (#37985) 2026-02-23 22:00:16 +01:00
models PERF: speed up chat channel and thread unread queries (#39398) 2026-04-22 14:57:56 +10:00
queries/chat PERF: speed up chat channel and thread unread queries (#39398) 2026-04-22 14:57:56 +10:00
serializers/chat DEV: Apply consistent N+1 fix pattern to ThreadOriginalMessageSerializer (#38667) 2026-03-17 14:17:58 -05:00
services/chat SECURITY: Harden chat DM channel creation and expansion 2026-03-31 15:12:45 +01:00
validators/chat FEATURE: Add setting to prevent anonymous users from using chat (#31842) 2025-03-21 13:32:52 +03:00
views PERF: fix performance of chat email notifications 2024-06-10 14:25:06 +02:00