在高流量的資料庫驅動應用中,一條低效的 SQL 查詢可能拖垮整個系統效能。MySQL 內建多種優化工具,本文深入探討三大核心優化技術:索引優化、EXPLAIN 執行計畫分析、內部參數調校。
CREATE INDEX idx_username ON users(username);
對 WHERE 或 HAVING 條件中常用的欄位建立索引,可大幅加速查詢。使用 SHOW INDEX FROM users; 查看索引狀態。
在 SELECT 前加上 EXPLAIN,可看到 MySQL 如何執行查詢、掃描行數、使用哪些索引等關鍵資訊。
原始查詢連接 country 與 city 表,EXPLAIN 顯示需掃描 city 表全表 4019 筆資料。
優化動作:為 city 表的 countrycode 欄位建立索引:
CREATE INDEX idx_ccode ON city(countrycode);
再次執行 EXPLAIN,掃描行數驟降至 333 筆,效能提升近 90%!
| 欄位 | 含義 |
|---|---|
| type | 連接類型(system > const > eq_ref > ref > range > index > ALL) |
| possible_keys | 可能使用的索引 |
| key | 實際使用的索引 |
| rows | 預估掃描行數 |
| Extra | 額外資訊(Using index、Using where、Using filesort 等) |
透過 my.cnf(或 my.ini)調整關鍵參數:
| 參數 | 建議值 | 說明 |
|---|---|---|
| key_buffer_size | 實體記憶體 25% | 索引緩衝區大小,影響索引讀寫效能 |
| read_buffer_size | 視查詢模式調整 | 全表掃描時的緩衝區大小 |
| table_open_cache | 配合 max_connections | 同時開啟表的最大數量 |
| long_query_time | 1-2 秒 | 慢查詢日誌閾值,用於發現效能瓶頸 |
優化是持續迭代的過程:建立適當索引 → 用 EXPLAIN 驗證 → 調整參數微調。三者結合,方能讓 MySQL 在高負載下穩定高效運行。