透過預存程序向分區表 part_tab 寫入 800 萬筆測試資料(耗時 8 分 17 秒),再複製至非分區表 no_part_tab(耗時 51.59 秒)。
| 表類型 | 查詢時間 | 說明 |
|---|---|---|
非分區表 no_part_tab | 38.30 秒 | 全表掃描 800 萬列 |
分區表 part_tab | 3.88 秒 | 僅掃描分區 p1(約 79 萬列) |
效能提升約 90%,EXPLAIN PARTITIONS 確認僅存取單一分區。
type: ALL
possible_keys: NULL
key: NULL
rows: 8000000
Extra: Using where
partitions: p1
type: ALL
possible_keys: NULL
key: NULL
rows: 798458
Extra: Using where
分區裁剪 讓掃描列數從 800 萬降至 80 萬,直接決定效能差異。
原分區表含 c2 VARCHAR(30) 欄位,平常極少查詢。嘗試移除該欄位(垂直分區概念),查詢速度再獲 90% 提升。
啟示:即使 MySQL 5.1 內建水平分區,垂直分區(將冷熱欄位分離)在特定場景仍具高價值,需手動實作但收益顯著。