MySQL 索引类型及应用¶
一、按数据结构分¶
B+ 树索引¶
最常用,InnoDB 默认。
Hash 索引¶
Memory 引擎支持,等值查询 O(1),不支持范围。
全文索引¶
倒排索引,用于文本搜索。
二、按物理存储分¶
聚簇索引¶
叶子节点存整行数据。一张表一个(主键)。
二级索引(非聚簇)¶
叶子节点存主键值。查二级索引需要回表。
三、按字段分¶
主键索引¶
PRIMARY KEY,聚簇索引。
唯一索引¶
UNIQUE,值唯一。
普通索引¶
INDEX。
联合索引¶
多字段:(a, b, c)。最左前缀原则。
四、适用场景¶
| 查询 | 索引 |
|---|---|
| WHERE id = 1 | 主键 |
| WHERE name = 'a' | 普通索引 |
| WHERE age > 18 | B+ 树(范围) |
| WHERE a = 1 AND b = 2 | 联合索引 |
| ORDER BY | 联合索引 |
| LIKE 'xxx%' | B+ 树 |
| LIKE '%xxx' | 不走索引 |
五、注意¶
- 索引不是越多越好,写时要维护。
- 联合索引遵守最左前缀。
- 函数操作会让索引失效。
高频追问
聚簇索引 = 数据和索引存在一起,InnoDB 一张表只能有一个。