索引是關係資料庫效能的核心。本文系統說明 MySQL 索引類型、單欄 vs 多欄索引、最左前綴原則、EXPLAIN 輸出欄位解讀、索引缺點與實務建議。
| 類型 | 建立語法 | 特性 |
|---|---|---|
| 普通索引 | CREATE INDEX idx_name ON tbl(col)ALTER TABLE tbl ADD INDEX idx_name (col) | 無唯一性限制 |
| 唯一索引 | CREATE UNIQUE INDEX idx_name ON tbl(col)ALTER TABLE tbl ADD UNIQUE idx_name (col) | 值不可重複,允許 NULL |
| 主鍵 | PRIMARY KEY (col) (建表時)ALTER TABLE tbl ADD PRIMARY KEY (col) | 唯一 + NOT NULL,每表僅一個 |
| 全文索引 | FULLTEXT INDEX idx_name (col) | 支援 MATCH() AGAINST(),MyISAM/InnoDB 5.6+ |
| 欄位 | 含義 | 理想值 |
|---|---|---|
type | 連接類型:system > const > eq_ref > ref > range > index > ALL | ref 或更好 |
possible_keys | 可能用到的索引名稱 | 含目標索引 |
key | 實際使用的索引 | 非 NULL |
key_len | 使用的索引長度 (Bytes) | 符合預期 |
ref | 比較參考:const / 欄位名 | const 為佳 |
rows | 預估掃描列數 | 1 或極小 |
Extra | 額外資訊:Using where、Using index、Using temporary、Using filesort | Using index (覆蓋索引) |
WHERE、JOIN、ORDER BY、GROUP BY 欄位建立索引SELECT a,b FROM t WHERE c=1 → 索引 (c,a,b) 避免回表ANALYZE TABLE 更新統計資訊EXPLAIN 每條核心 SQL,消除 ALL、Using temporary、Using filesort索引設計是「空間換時間」的藝術。掌握 B+ 樹結構、最左前綴、EXPLAIN 解讀、覆蓋索引四大核心概念,並建立定期審視慢查詢 → 分析執行計畫 → 調整索引 → 驗證效果的閉環流程,是 DBA 與後端工程師的核心競爭力。