| 優點 | 缺點 |
|---|---|
| 避免全表掃描、快速定位 | 佔用磁碟空間 |
| 多表 JOIN 消除笛卡爾積爆炸 | 降低 INSERT/UPDATE/DELETE 速度 |
| MIN/MAX 直接取值無需掃表 | |
| ORDER BY/GROUP BY 利用有序性 | |
| 覆蓋索引 (Covering Index) 只讀索引不回表 |
INDEX idx_name (name(10)) — 減 I/O、提高緩存命中率(a,b,c),a 是最左前綴,查詢必須從 a 開始才能用到索引!=、NOT IN、LIKE '%abc' 通常不可用slow_query_log=1, long_query_time=1mysqldumpslow -s t /var/log/mysql/slow.log 找出耗時 Top SQLEXPLAIN SELECT ... 分析執行計劃STRAIGHT_JOIN)| 欄位 | 關注點 | 理想值 |
|---|---|---|
| type | 連接類型 | ref、eq_ref、range、index_merge;避免 ALL (全表掃描) |
| key | 實際用到的索引 | 非 NULL |
| key_len | 索引長度 | 越短越好 (滿足區分度前提) |
| rows | 預估掃描行數 | 越少越好 |
| Extra | 額外信息 | 避免 Using filesort、Using temporary;期望 Using index (覆蓋索引) |
WHERE varchar_col = 123 → 改 WHERE varchar_col = '123'WHERE YEAR(date_col)=2023 → 改 WHERE date_col >= '2023-01-01' AND date_col < '2024-01-01'LIKE '%abc%' 導致全掃 → 全文索引或應用層搜尋引擎ANALYZE TABLE 更新統計信息,幫助優化器做更好決策