You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改GROUP BY查询实现通知类型未读消息仅计1条及效率对比

解决方案

修改后的SQL查询

要实现每个存在未读消息的通知类型返回count=1的需求,你可以直接在查询中指定count字段的值为1,结合GROUP BY type聚合同类型的未读记录:

SELECT type, 1 AS count
FROM notifications
WHERE userID = 123 AND isRead = 0
GROUP BY type;

这条语句会筛选出用户123的所有未读通知,按type分组后每个类型返回一行,count固定为1,完全匹配你期望的结果格式。

关于三次独立查询的性能对比

运行三条分别针对mention/follow/reply的独立查询,通常不会比单条GROUP BY查询更快,原因如下:

  • 单条查询只需扫描一次符合userID=123 AND isRead=0条件的数据,三次查询则需要重复执行三次扫描——即使有索引,也会增加连接、解析和执行的额外开销。
  • 如果表上建有(userID, isRead, type)的复合索引,单条GROUP BY查询可直接利用索引完成分组,效率极高;三次独立查询虽也能用到索引,但总执行成本更高。
  • 从代码维护角度,单条查询更简洁,无需处理三次查询的结果合并逻辑。

只有当数据量极小(比如每条类型的未读记录都仅1条)时,三次查询的差异可忽略,但实际场景中单条GROUP BY方案更优。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:12:22