索引是提升查詢效能的核心手段。本文梳理索引設計原則、常見失效場景與 InnoDB 主鍵選擇建議。
INDEX idx_name(name(10))),節省空間。(a,b,c),查詢必須從最左列開始,不可跳過中間列。WHERE YEAR(create_time) = 2023 會導致索引失效,應改為範圍查詢 create_time >= '2023-01-01' AND create_time < '2024-01-01'。-- 建表 CREATE TABLE friends ( uid INT, fuid INT, PRIMARY KEY (uid, fuid) ) ENGINE=InnoDB; -- 複合索引 (uid, fuid) -- 案例 1:WHERE uid = 1 AND fuid = 2 → 命中索引 -- 案例 2:WHERE fuid = 2 → 未從最左列開始,全表掃描 -- 案例 3:WHERE uid = 1 → 命中索引最左列 -- 案例 4:WHERE uid > 10 → 範圍查詢後列 fuid 無法用索引 -- 案例 5:WHERE uid = 1 ORDER BY fuid → 命中索引,避免 filesort -- 案例 6:WHERE uid = 1 ORDER BY fuid DESC → 同樣命中(MySQL 8.0+ 支援降序索引) -- 案例 7:WHERE uid = 1 AND fuid > 10 ORDER BY fuid → 命中 -- 案例 8:WHERE fuid = 2 ORDER BY uid → 未命中,需 filesort
col + 1 = 10)%keyword)索引設計是空間換時間的藝術。遵循最左前綴、高基數優先、避免列運算、控制索引數量,並定期用 EXPLAIN 驗證執行計畫,才能持續保持查詢高效。