为什么要使用b+树作为索引数据结构
为什么要使用b+树作为索引数据结构
- 范围查询效率高:b+树所有的关键字节点都被连成一个有序的链表,可以很方便的顺序查询,范围查询效率高。
- 磁盘读写性能高:b+树的非叶子节点不存储数据,只存储关键字和指向子节点的指针,所以每个节点可以存储的关键字就增多,一次性读入内存的关键字也增多,树高度减少,磁盘I/O次数减少
- 查询效率稳定:任何关键字的查找都要从根节点到叶子节点,所以效率稳定。
- 适合顺序查找,遍历:b+树中,所有的叶子节点都是有序的,扫库只需要遍历叶子节点即可。
拓展:聚簇索引和非聚簇索引
聚簇索引
聚簇索引(Clustered Index)一般指的是主键索引(如果存在主键索引的话),聚簇索引也被称之为聚集索引。将数据存与索引放到一块,索引结构的叶子节点保存了行数据。
非聚簇索引
在非聚簇索引的叶子节点上存储的并不是真正的行数据,而是主键 ID,所以当我们使用非聚簇索引进行查询时,首先会得到一个主键 ID,然后再使用主键 ID 去聚簇索引上找到真正的行数据,我们把这个过程称之为回表查询。
将数据和索引分开存储,索引结构的叶子节点指向了数据对应的位置。
聚簇索引和非聚簇索引的区别主要有以下几个:
- 聚簇索引叶子节点存储的是行数据;而非聚簇索引叶子节点存储的是聚簇索引(通常是主键 ID)。
- 聚簇索引查询效率更高,而非聚簇索引需要进行回表查询,因此性能不如聚簇索引。
- 聚簇索引一般为主键索引,而主键一个表中只能有一个,因此聚簇索引一个表中也只能有一个,而非聚簇索引则没有数量上的限制。