5 月新增了一个功能 https://meta.discourse.org/t/selective-dismissal-of-new-and-unread-topics/191641/1。我们最近刚升级到最新版的 Discourse,通过查看代码和数据库日志,我们发现当用户执行“忽略新主题”操作但未进行选择(即仅批量忽略)时,我们在请求参数中向 reset-new 传递了 tracked = false,而没有传递其他内容。

检查该 PR 的变更,我认为当我们尝试确定 topic_scope 时,会进入这里 FEATURE: Allow selective dismissal of new and unread topics (#12976) · discourse/discourse@7a79bd7 · GitHub
由于我们没有传递任何 topic_ids,因此跳过了 if 语句,直接跳转到第 989 行。
我们运营着一个规模相当大的 Discourse 服务器,我认为默认包含所有主题的做法开销很大,因为该查询实际上生成了如下 SQL:
LEFT JOIN topic_users ON topic_users.topic_id = topics.id AND topic_users.user_id = xxx WHERE "topics"."deleted_at" IS NULL AND "topics"."id" IN (1, ... 1000000) AND (topics.created_at >= 'date') AND (topic_users.last_read_post_number IS NULL) AND (topics.archetype <> 'private_message') ORDER BY topics.created_at DESC LIMIT 500
据我所知,IN 子句中几乎包含了所有 100 万 + 的主题。
我们能否将批量选择的默认行为改为仅传递具体的 topic_ids,而不是默认包含所有可能的主题?