MySQL序列最全知识点总结:B+树、索引类型、索引结构、存储引擎

1、B树和B+树

​ 都是一种平衡的多路查找树B树非叶子和叶子节点都是存储数据+索引,每一个节点都是一个页,每一页的存储空间有限**(16kb)**,页里面相当于有多个节点。B+树的非叶子节点只是存储索引,叶子节点才会存储数据B+树和B树相比,会更加的矮宽

​ B+树高度较低,并且每一页由于不用存储数据信息,可以存较多的索引信息,加大了每页存储节点的数量,减少磁盘IO

  • 具体的讲解可以看下图:

在这里插入图片描述

这个是聚簇索引的B+树,绿色的0代表这个页中的节点是存储数据的节点,2表示是这个页的开始节点【记录了上一个页的地址,方便链表连接相邻页】,3表示是结束节点【记录了下一个页的地址,方便链表连接相邻页】,1表示是非叶子节点

​ 黄色的序列表示的是这个需要记录的表中实际索引,从根节点开始,他相邻的两个节点都是“一段索引的最开始”,相当于如果我想找表中索引1-320之间的数据,我就需要去下一层的页30去找,同此思路,继续向下查找,直到叶子节点。

下面这个是非聚簇索引的B+树。需要再这个的基础上再去原本的主键索引B+树去查找

在这里插入图片描述

2、索引

B+树中主要有两种,也可以说索引主要有两类:聚簇索引、非聚簇索引

聚簇索引的叶子节点存储了整个数据行,而非只是索引键值,并且是按照主键,也就是索引值排序

​ 非聚簇索引的叶子节点存储了索引键值和指向对应数据行的指针。包括普通索引、唯一索引等。是按照选取哪一个列当作索引值进行排序的

​ 比如非聚簇索引中,我如果是用表中的字段name当作索引【他会按照name这个字段的大小进行存储】,那么看B+树的第二个图,蓝色就是name的值,而下面的黄色一行便指向的是这个name值对应的数据行是在表中的第几行

​ 默认是主键当作索引,且创建的是聚簇索引。如果没有创建主键,InnoDB会自动创建rowid辅助进行创建了聚簇索引

​ 而且聚簇索引和非聚簇索引其实是可以共同存在于一张表中的

3、MyISAM和InnoDB区别

1、讨论这两种存储引擎的区别

主要是记住MyISAM不支持外键和事务,锁也是只有表锁,没有行锁

他支持的少所以如果只是读操作会比较高效,但是如果有修改等操作还是需要InnoDB

在这里插入图片描述

2、讨论这两个引擎使用的索引区别(***重点说这个)

​ MyISAM使用的是非聚簇索引,主键索引B+树和辅助索引B+树的叶子节点都保存了一个地址,指向真正的表数据,并不真正的存储数据。叶子节点并不实际存储数据。

​ InnoDB是聚簇索引,默认是主键,主键索引B+树的叶子节点存储的是行数据,辅助索引B+树的叶子节点存储的是索引值和主键值(也就是指向行数据的指针),通过这个主键值二次查找,去主键索引B+树种找对应的行数据

4、索引结构

说的B+树,Hash表,红黑树都算是MySQL的索引结构

​ 不用红黑树是因为:红黑树的出度都是2,节点很多的时候,红黑树的高度会比B+树高很多,IO次数会很多,查询变慢。不过红黑树比普通的平衡二叉树好在,旋转至少两次就能平衡,较少资源占用

​ 不用hash表是因为,hash表需要将内存全部加载到内存,占用内存较大,而采用B+树的话可以分批加载到内存。并且hash结构的索引是无序的,会比较慢,而B+树是有序的

用内存较大,而采用B+树的话可以分批加载到内存。并且hash结构的索引是无序的,会比较慢,而B+树是有序的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值