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

根据另一表统计行数筛选会议的SQL查询写法优化咨询

你当前写的关联子查询写法逻辑完全正确,但会议表数据量较大时会触发多次参会人表的遍历统计,性能表现一般,下面是两种更优的实现方案:

方案1:LEFT JOIN + 分组聚合(适合需要同步返回参会人数的场景)

SELECT m.*
FROM meetings m
LEFT JOIN meeting_attendees ma ON m.id = ma.meeting_id
GROUP BY m.id
HAVING m.max_size IS NULL 
   OR COUNT(ma.meeting_id) < m.max_size;
  • 优势:如果需要同步返回参会人数字段,只需要在SELECT语句中新增COUNT(ma.meeting_id) AS attendee_count即可,一次查询就能拿到所有需要的信息
  • 注意点:需要确保meetings.id是表主键,否则开启了严格分组模式的数据库(比如开启ONLY_FULL_GROUP_BY的MySQL)会要求GROUP BY子句补全所有选中的meetings表字段

方案2:EXISTS半连接(适合仅需筛选会议信息、不需要返回参会人数的场景,性能最优)

SELECT *
FROM meetings m
WHERE m.max_size IS NULL
   OR EXISTS (
       SELECT 1
       FROM meeting_attendees ma
       WHERE ma.meeting_id = m.id
       HAVING COUNT(*) < m.max_size
   );
  • 优势:半连接不需要返回参会人表的完整匹配结果,数据库内部可以提前终止计数流程,比原始子查询性能高很多,尤其是参会人表数据量大的时候优化效果更明显
  • 通用优化建议:给meeting_attendees.meeting_id字段添加普通索引,上述两种方案的执行效率都会有大幅提升

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:18:03