動作
修改需求 #1319
進行中[系統優化] 優化 Dashboard 與 Diet Record 慢查詢
開始日期:
2026-06-10
完成日期:
完成百分比:
0%
預估工時:
概述
問題¶
近 30 分鐘的 api.log 量測:
-
GET /api/course/dashboard/{id}平均 500~580ms(少數達 700ms+) -
GET /api/course/diet/record/info/{id}平均 260~310ms(單筆 select 偏慢) -
POST /api/course/diet/records平均 150~420ms(重組當日飲食記錄) -
POST /api/course/diet/save平均 260~330ms
dashboard 看 source(com.crazysundiet.hm.front.course.service.CourseServiceImpl(150-300))會拿 body indicators 4 筆 + 每日體重 21 筆 + 體脂 21 筆,疑似 N+1。
建議修法¶
- 開 slow query log(見相關 issue)後先量測實際 SQL
- dashboard 組裝改用單一 JPQL/Criteria query 或 projection 一次拿齊
-
CourseServiceImpl內的 for-loop 改成 batch fetch -
DietServiceImpl內 save 後 getById 重複取資料的,確認是否有必要
範圍¶
java/src/main/java/com/crazysundiet/hm/front/course/service/CourseServiceImpl.javajava/src/main/java/com/crazysundiet/hm/front/course/service/DietServiceImpl.javajava/src/main/java/com/crazysundiet/hm/helper/CourseHelperImpl.java
動作