前言
InnoDB有两大类索引
- 聚集索引(clustered index)
- InnoDB 聚集索引 的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引
- (1)如果表定义了PK,则PK就是聚集索引;
- (2)如果表没有定义PK,则第一个not NULL unique列是聚集索引;
- (3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;
- PK查询非常快,直接定位行记录。
- 普通索引(secondary index)
- InnoDB 普通索引 的叶子节点存储主键值。
- 注意,不是存储行记录头指针,MyISAM的索引叶子节点存储记录指针。
回表查询
(1)先通过普通索引定位到主键值id=5;
(2)在通过聚集索引定位到行记录;
这就是所谓的 回表查询 ,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。