在 MySQL 資料庫中,索引是提升查詢效能的關鍵機制。主要分為兩大類型:Hash 索引與B+ 樹索引(常稱 B-Tree 索引)。InnoDB 與 MyISAM 儲存引擎預設使用 B+ 樹索引,而 Memory 引擎支援 Hash 索引。理解兩者差異,能幫助你在不同場景下做出最佳選擇。
B+ 樹索引因其有序特性,支援多種查詢模式:
如 order_id = "123",可直接定位唯一記錄。
聯合索引 (user_id, date) 中,僅查詢 user_id 可用索引,但單獨查詢 date 則無法使用。
order_sn LIKE '134%' 可利用索引,但 LIKE '%134' 則不行。
create_time > '2015-01-09' AND create_time < '2015-01-10' 可使用索引範圍掃描。
如 user_id = 1 AND create_time > '2016-09-18',user_id 精確匹配,create_time 範圍匹配。
查詢欄位全部包含在索引中,無需回表,大幅提升效能。
(order_id, create_time),單查 create_time 無法使用索引。(date, name, phone),查詢 date 和 phone 時,僅 date 生效。user_id = 1 AND age > 20 AND name = 'Tom' 中,name 索引失效。Hash 索引基於雜湊表實現,僅支援等值查詢(=、IN)。特點如下:
錯誤:WHERE TO_DAYS(out_date) - TO_DAYS(NOW()) <= 30
正確:WHERE out_date < DATE_ADD(NOW(), INTERVAL 30 DAY)
InnoDB 單列索引長度限制 767 字節(或 3072 字節,視版本而定),建議對 CHAR/VARCHAR 設定前綴長度(如 10-15 字元)。
選擇性 = COUNT(DISTINCT column) / COUNT(*),越接近 1 越適合建索引。

