mirror of
https://github.com/open-webui/open-webui.git
synced 2026-09-15 23:32:40 +00:00
Replace per-message database queries with batch IN-clause queries in channel message handlers. This eliminates the N+1 query pattern that caused ~102 queries per channel page load (50 messages × 2 queries each). Changes: - Add get_reactions_by_message_ids() to MessageTable: single query fetches all reactions for multiple messages using IN clause with User JOIN, returns dict[message_id, list[Reactions]] - Add get_thread_reply_counts_by_message_ids() to MessageTable: single GROUP BY aggregate query returns (count, max_created_at) per parent, replacing full object loads just to call len() - Refactor get_channel_messages(): 102 → 4 queries per page - Refactor get_pinned_channel_messages(): 22 → 3 queries per page - Refactor get_channel_thread_messages(): 53 → 4 queries per page - Refactor send_notification(): N+1 membership check → batch set lookup |
||
|---|---|---|
| .. | ||
| data | ||
| internal | ||
| migrations | ||
| models | ||
| retrieval | ||
| routers | ||
| socket | ||
| static | ||
| storage | ||
| tools | ||
| utils | ||
| __init__.py | ||
| alembic.ini | ||
| config.py | ||
| constants.py | ||
| env.py | ||
| events.py | ||
| functions.py | ||
| main.py | ||
| tasks.py | ||