系統整理 MySQL 索引的創建、刪除、修改、查看語法與最佳實踐,涵蓋唯一/全文/空間索引、前綴索引、復合索引、存儲引擎限制等核心知識點。
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON table_name (index_col_name[, ...]);
| 選項 | 說明 |
|---|---|
| UNIQUE | 值唯一,允許 NULL |
| FULLTEXT | 全文搜尋(MyISAM 5.6+、InnoDB 5.6+) |
| SPATIAL | 空間資料(MyISAM、InnoDB 5.7+) |
| USING BTREE | B+ 樹,預設,支援範圍查詢 |
| USING HASH | 雜湊,僅 MEMORY/HEAP 引擎,等值查詢極快 |
CREATE INDEX idx_user_username ON user (username(6));
CHAR/VARCHAR/TEXT/BLOB,僅索引前 N 字元。TEXT/BLOB **必須**指定前綴長度。ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name (col_list) [USING type];
ALTER TABLE table_name DROP INDEX index_name;
MySQL 無直觀 ALTER INDEX,標準做法:**先刪後建**同名索引。
ALTER TABLE user DROP INDEX idx_user_username; CREATE INDEX idx_user_username ON user (username(8));
SHOW INDEX FROM table_name [FROM db_name]; -- 或 SHOW INDEX FROM db_name.table_name;
輸出關鍵欄位:Key_name、Seq_in_index(復合索引順序)、Column_name、Cardinality(基數,越高選擇性越好)、Index_type(BTREE/HASH)。
MyISAM、InnoDB、BDB 引擎支援對 NULL 列或 TEXT/BLOB 列建索引。