標準語法
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING {BTREE|HASH|RTREE}]
ON tbl_name (col_name[(length)] [ASC|DESC], ...)
參數詳解
| 子句 | 說明 |
UNIQUE | 值唯一,允許多個 NULL(除主鍵外) |
FULLTEXT | 全文索引,僅 MyISAM/InnoDB 5.6+,配合 MATCH() AGAINST() |
SPATIAL | 空間索引,僅 MyISAM/InnoDB 5.7+,列需 NOT NULL |
col_name(length) | 前綴索引,CHAR/VARCHAR/BINARY/VARBINARY 必填,TEXT/BLOB 必填 |
ASC|DESC | MySQL 8.0+ 支持降序索引,優化 ORDER BY col DESC |
USING BTREE|HASH|RTREE | InnoDB 僅支持 BTREE;MEMORY/HEAP 可選 HASH;SPATIAL 固定 RTREE |
實戰示例
-- 普通索引
CREATE INDEX idx_name ON user(name);
-- 前綴索引(節省空間、提升寫入)
CREATE INDEX idx_email_prefix ON user(email(10));
-- 組合索引(最左前綴原則)
CREATE INDEX idx_a_b_c ON t(a,b,c);
-- 唯一索引
CREATE UNIQUE INDEX uk_phone ON user(phone);
-- 全文索引(需 MySQL 5.6+ InnoDB)
ALTER TABLE article ADD FULLTEXT INDEX ft_content (content);
引擎限制速查
| 引擎 | 支持類型 | 最大鍵長 | 備註 |
| InnoDB | BTREE | 767 字節(innodb_large_prefix=ON 時 3072) | 主鍵聚簇,二級索引存主鍵值 |
| MyISAM | BTREE, FULLTEXT, SPATIAL | 1000 字節 | 非聚簇,索引存行指針 |
| MEMORY | HASH, BTREE | — | HASH 適合全鍵精確查找 |
常見誤區
- 不能用 CREATE INDEX 建主鍵,必須
ALTER TABLE t ADD PRIMARY KEY (col)。
- 前綴長度單位是「字符」而非字節,
utf8mb4 時 1 字符=4 字節,易超 767 限制。
DESC 索引僅 8.0+ 有效,舊版忽略不報錯。