專案

一般

配置概況

動作

修改需求 #1317

進行中

[系統優化] 補 hm_booking 缺少的 FK 索引(user_id / start_time / status)

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

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

匯出至 Atom PDF