为什么用b+树做mysql索引?还有其他类型吗?
一、数据存储的原理?
二、索引是什么呢?
三、如果没有索引会怎样?
四、有索引会怎样?
五、所以还有哪些索引类型呢?
六、b+树有什么优点呢?
七、引用
数据存储的原理?
- 数据库文件是以磁盘文件存放在系统中的(持久性)
- 所以决定我们select的快慢,是由执行磁盘io的次数决定的
所以,想提升数据的查询数据,就得减少磁盘io
所以,出现了索引。
索引是什么呢?
- 索引是帮助高效查询数据的数据结构,记录了某些列的值(如唯一索引、联合索引等,由一个或多个字段组成)
- 常见的有b树+b+树
如果没有索引会怎样?
- 我们需要一条条记录去判断是否符合,这就是全表扫描,效率很低,最差情况为最后一条才查到数据
有索引了会怎样?
- 比如我们将name设置为索引,我们先去查找索引(此前name已经按照如字母排序排列),所以我们可以像查字典一样去查找该数据,直接拿到数据(非聚簇索引)
- 又比如我们用id设置为索引,name为辅助索引,我们就可以通过name查找到id,再由id找到对应记录(聚簇索引)
- 聚簇索引指索引和数据放一起,找到索引则找到数据
- 非聚簇索引指索引和数据分开,找到索引后再指向数据
所以还有哪些索引类型呢?
- 链表
- 数组
- AVL(平衡二叉树,磁盘io过多,最坏情况次数为树的高度)
- b/b+ 树
因为AVL磁盘io过多,所以为了减少,就需要减低**树的高度**,因此就出现了**b/b+树**
b+树有什么优点呢?
- 对于磁盘友好,数据都放在叶子结点
- 比起AVL可以减少磁盘io次数,而且稳定(都在叶子结点)
- 范围查找方便(叶子结点间有指针,形成链表)