索引是查詢性能的關鍵,MySQL 提供五大索引類型,各有適用場景與限制。本文系統梳理定義、差異、創建語法與選型建議。
| 類型 | 關鍵字 | 允許 NULL | 允許重複 | 典型場景 |
|---|---|---|---|---|
| 主鍵索引 | PRIMARY KEY | 否 | 否 | 表唯一標識,聚簇索引(InnoDB) |
| 唯一索引 | UNIQUE | 是 | 否 | 業務唯一約束(郵箱、身份證) |
| 普通索引 | INDEX / KEY | 是 | 是 | 通用查詢加速 |
| 全文索引 | FULLTEXT | 是 | 是 | 長文本搜索(文章、日誌),MyISAM/InnoDB 5.6+ 支持 |
| 空間索引 | SPATIAL | 否 | 是 | 地理空間數據(GIS),需配合幾何類型 |
-- 建表時創建
CREATE TABLE t (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE,
name VARCHAR(50),
content TEXT,
location POINT,
INDEX idx_name (name),
FULLTEXT idx_content (content),
SPATIAL idx_loc (location)
) ENGINE=InnoDB;
-- 後續添加
ALTER TABLE t ADD INDEX idx_name (name);
ALTER TABLE t ADD FULLTEXT idx_content (content);
PRIMARY KEYUNIQUEFULLTEXT(短文本用 LIKE+普通索引即可)SPATIALINDEXMATCH() AGAINST() 語法,不支援 LIKENOT NULL