索引
- 索引的本质是一种数据结构。在InnoDB存储引擎中,索引底层采用B+Tree实现
- 可以理解为数据库在数据表之外维护了一棵(或多棵)有序的B+Tree,用于加快数据查询速度
1-聚簇索引
如果定义了主键,InnoDB会使用主键作为聚簇索引。聚簇索引的B+Tree叶子节点存储的是整行数据,因此通过主键索引可以直接获取整条记录
2-二级索引
你在其他列上建的索引,就是二级索引
二级索引的叶子节点存储的是主键值,而不是整行数据
查询时会先通过二级索引找到主键,再通过主键索引找到整行数据,这个过程叫回表
3-影响
索引可以提高查询速度,但不能无限制创建
因为在执行 INSERT、UPDATE、DELETE 时,不仅需要修改表数据,还需要同步维护所有相关索引的 B+Tree 结构
索引过多会降低数据写入性能,并增加存储空间占用
4-简单B+tree概念
只需要理解:
4-1.为什么查得快
因为:
B+树高度很低
一般:
1000万数据
树高可能才 3~4 层
查找:
3~4 次磁盘IO
4-2. 为什么范围查询快
B+树叶子节点:
是链表
所以:
WHERE id BETWEEN 1000 AND 2000
可以:
1000 → 1001 → 1002 → ... → 2000
顺序扫描