動作
修改需求 #1317
進行中[系統優化] 補 hm_booking 缺少的 FK 索引(user_id / start_time / status)
開始日期:
2026-06-10
完成日期:
完成百分比:
0%
預估工時:
概述
問題¶
SHOW INDEX FROM hm_booking 顯示此表只有 PRIMARY on id,沒有任何 FK 索引。但業務上常見的查詢都會用:
-
WHERE user_id = ?(會員自己的預約列表) -
WHERE start_time BETWEEN ? AND ?(每日 12:00 提醒排程 ComingByReminder) -
WHERE status = 'confirmed' AND start_time < NOW()(BookingExpireChecker)
這些都會做 full table scan。
證據¶
- 表大小:11,355 rows / 2.5 MB
- 觀察
hm_booking索引僅 PRIMARY(cardinality 11,211)
建議修法¶
ALTER TABLE hm_booking ADD INDEX idx_user_id (user_id);
ALTER TABLE hm_booking ADD INDEX idx_start_time (start_time);
ALTER TABLE hm_booking ADD INDEX idx_status (status);
ALTER TABLE hm_booking ADD INDEX idx_user_start (user_id, start_time DESC); -- 複合
驗證¶
- 開 slow_query log(見相關 issue)後重跑
- EXPLAIN 上述三種查詢應走 index range scan
動作