| 參數 | 建議值 | 說明 |
|---|---|---|
innodb_buffer_pool_size | 物理記憶體 60%~80% | 核心緩衝池,缓存數據與索引 |
innodb_additional_mem_pool_size | 64M | 內部資料結構記憶體池(舊版本相關) |
key_buffer_size | 視 MyISAM 表大小而定 | MyISAM 索引緩衝區 |
善用 SHOW STATUS 觀察運行狀態,決定調整哪些參數。
-- 查看 DML 執行次數(Session 級,關閉視窗歸零)
SHOW SESSION STATUS LIKE 'Com_update';
-- 查看 DML 執行次數(Global 級,持久累計)
SHOW GLOBAL STATUS LIKE 'Com_insert';
-- 連線嘗試總數
SHOW STATUS LIKE 'Connections';
-- 服務運行時間(秒)
SHOW STATUS LIKE 'Uptime';
-- 慢查詢次數(預設 > 10 秒)
SHOW STATUS LIKE 'Slow_queries';
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 3;
查看日誌路徑:SHOW VARIABLES LIKE 'slow_query_log_file';
WHERE、JOIN、ORDER BY 的欄位優先建索引。查詢條件必須包含組合索引的最左列,索引才會生效。
LIKE 'abc%' 可用索引,LIKE '%abc' 無法使用。
OR,且兩側欄位索引不一致LIKE '%...' 以萬用字元開頭SHOW STATUS LIKE 'Handler_read%';
Handler_read_key:越大越好(索引命中)Handler_read_rnd_next:越小越好(全表掃描)| 特性 | MyISAM | InnoDB |
|---|---|---|
| 事務支援 | 否 | 是 |
| 外鍵支援 | 否 | 是 |
| 鎖粒度 | 表鎖 | 行鎖 |
| 查詢速度 | 快 | 較慢但支援並發 |
| 刪除空間回收 | 需手動 OPTIMIZE TABLE | 自動回收 |
將同一張表的資料按規則(如 ID 範圍、時間、Hash)拆分到多張結構相同的表中。適用於單表資料量過大、查詢緩慢的場景。

將大表按業務邏輯拆分為多張關聯表,將不常用或大欄位(如頭像、長文本)移至獨立表。類似「學生基本資料表」與「考試詳情表」分離,甚至將頭像獨立至圖片服務器。

主庫處理寫入,同步至多個從庫分擔讀取壓力,透過中間件(如 MyCat、ProxySQL)實現自動路由。