2406b9b198
【性能问题】 活动列表接口对每个活动单独调用 _count_enrolled 和 _count_applied 查询报名人数, 导致典型的 N+1 查询问题:30个活动 = 60次额外SQL查询,严重拖慢接口响应。 【优化方案】 1. 新增 _batch_count_bookings(event_ids) 批量查询函数 - 一次性查询所有活动的已报名人数和报名占用数 - 使用 GROUP BY event_id,2次SQL查询替代60次 2. 修改 event_out 函数,增加可选参数 enrolled_count / applied_count - 传入预查询值时直接使用,不再调用 _count_enrolled / _count_applied - 未传入时保持原有行为(向后兼容,不影响详情页等其他调用) 3. 优化所有活动列表接口,先批量查询再传入 event_out: - GET /api/events(列表/current/bookable 三种模式) - GET /api/events/mine(我的活动) - GET /api/events/managed(我管理的活动) - GET /api/events/pending/list(待审核列表) 【性能提升】 - SQL查询次数:从约72次(2次全表扫描 + 70次COUNT)减少到约6次 - 预期接口响应时间提升 5-10 倍 - 活动列表越大,优化效果越明显