專案

一般

配置概況

動作

修改需求 #1319

進行中

[系統優化] 優化 Dashboard 與 Diet Record 慢查詢

是由 陳國瑋約 2 個月 前加入. 於 約 2 個月 前更新.

狀態:
New
優先權:
High
被分派者:
開始日期:
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。

建議修法

  1. 開 slow query log(見相關 issue)後先量測實際 SQL
  2. dashboard 組裝改用單一 JPQL/Criteria query 或 projection 一次拿齊
  3. CourseServiceImpl 內的 for-loop 改成 batch fetch
  4. DietServiceImpl 內 save 後 getById 重複取資料的,確認是否有必要

範圍

  • java/src/main/java/com/crazysundiet/hm/front/course/service/CourseServiceImpl.java
  • java/src/main/java/com/crazysundiet/hm/front/course/service/DietServiceImpl.java
  • java/src/main/java/com/crazysundiet/hm/helper/CourseHelperImpl.java
動作

匯出至 Atom PDF