KKB: MySQL 索引、B+树相对于B树的优势、聚簇索引 和 非聚簇索引

什么是索引?

索引类似图书的目录检索,可以提高数据检索的效率,降低数据库的IO成本

简单理解:快速查找排好序的一种数据结构

 

 

链表----二叉树-----平衡二叉树---(减少旋转的次数)--红黑树----B树---B+树

当数据存在内存中,红黑树的效率非常高,但是文件系统和数据库都是存在硬盘上的,如果数据量大的话,不一定能一次性加载到内存中、

所以一棵树都无法一次性加载进内存,又如何谈查找

因此就出现了专为磁盘等存储设备而设计的一种平衡多路查找树,也就是B数

与红黑树相比,在相同节点的情况下,一颗B/B+树的高度远远小于红黑树的高度

3 阶的树,节点最多存储 2 个,4阶最多存储3个。。。。。。

 

对于右边的那颗高度为3的树:

查找数字7 : 3步

查找数字10:   2步

查找1-5 : 过程相当于树的遍历,效率低,需要的步骤多

在计算机中,所有与空间相关的东西都是按照块(block)进行存取和操作的

 

B+树出现可以说是解决了B树的范围查找效率慢的问题

B树里面是每个节点都存储数据,而B+树的数据是存储

在叶子节点

 

 

B+树的优势是什么?

1.磁盘读写的代价更低

B树的数据和索引都在同一个节点上,那么每个块中包含的索引是少量的,如果想要去除比较深层的数据,意味着要读取更多的块,才能得到想要的索引和数据,那么就增加了IO次数

而B+树中每个块能存储的索引是B树的很多倍,那么获取比较深层的数据,也只需要读取少量的块就可以,那么久减少了磁盘的IO次数

2.随机IO的次数更少

随机I/O是指读写操作时间连续,但访问地址不连续,时长约为10ms

顺序I/O是指读取和写入操作基于逻辑块逐个连续访问来自相邻地址的数据,时长约为0.1ms

在相同情况下,B树要进行更多的随机IO,而B+树要进行更多的顺序IO,因此B+树效率也更加快

3.查询速度更稳定

由于B+树非叶子节点不存储数据,因此所有的数据都要查询至叶子节点,而叶子节点的高度都是相同的,因此所有数据的查询速度都是一样的

 

 

MySQL索引实现的总结(必背)

在数据库中,索引是提高数据的检索速度的,而索引是基于B+树的数据结构实现的

使用B+树的好处是:1.降低了磁盘读写代价  2. 顺序I/O提高效率  3.查询速度更加稳定

 

聚簇索引 和 非聚簇索引

索引和数据在一起就是聚簇索引,不在一起就叫非聚簇索引

5.7以后的mysql默认引擎都是InnoDB

在索引的分类中,我们可以按照索引的键是否为主键来分为“主索引”和“辅助索引”

因此:主索引只能有一个,辅助索引可以有很多个,只有主键索引为主索引,其他都是辅助索引

InnoDB中主键索引为聚簇索引,辅助索引是非聚簇索引:这句话的理解:

主键索引中通过B+树找到的叶子节点的数据包含了所有的数据

辅助索引的叶子节点的数据仅仅包含了辅助节点的数据,不包含所有的数据,如果需要索引外的内容,则需要回表

 

 

InnoDB和MyISAM的区别

1、数据的存储方式:

  • InnoDB由两种文件组成,表结构,数据和索引
  • MyISAM由三种文件组成,表结构、数据、索引

2、索引的方式:

相同点:都是基于B+树的数据结构建立的

不同点:InnoDB中主键索引为聚簇索引,辅助索引是非聚簇索引

              MyISAM中数据和索引存在不同的文件中,因此都是非聚簇索引

3、事务的支持:

innnoDb: 支持事务

MyISAM:不支持事务

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值