深入理解MySQL_8 索引Index(I)

田超凡

1 数据结构

一方面mysql的数据是存储在磁盘上的,另一方面还要满足对日常操作如【增删改查】的高效稳定的支持,我们当然可以采用更好的硬件来提升性能,但是选用合适的数据结构也很关键,innodb采用的是一种名为【b+树】的数据结构。

innodb中的数据是以【行】为单位,存在一个个大小为16k的【页】中,b+树的作用就是按照一个的组织形式,将所有的【页】组织关联起来。

1.1 B-树

这里的 B 表示 balance( 平衡的意思),B-树是一种【多路自平衡的搜索树】,它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点。

B-树有如下特点:

(1)所有键值分布在整颗树中;

(2)任何一个关键字出现且只出现在一个结点中;

(3)搜索有可能在非叶子结点结束;

(4)在关键字全集内做一次查找,性能逼近二分查找;

1.2 B+树

【B+树】是【B-树】的变体,也是一种多路搜索树, 它与 B- 树的不同之处在于:

(1)所有关键字存储在叶子节点

(2)为所有叶子结点增加了一个双向指针

1.3 选型缘由

问题一:为什么在b-树或b+树中选择?

  • mysql数据模型更适合用这类数据结构,一条数据中通常包含【id】+【其他列数据】,我们可以很轻松的根据id组织一颗B+树。
  • 我们知道innodb使用【页】(这是inndb管理数据的最小单位)保存数据,一页(16k),b+树中的每个节点都是一页数据。

问题二:为什么选择B+树?

  • 相同的空间,不存放【整行数据】就能存【更多的id】,b+树能使每个节点能检索的【范围更大、更精确,极大的减少了I/O操作,保证b+树的层高较低,通常3到4层的层高就能支持百万级别的访问】。
  • Mysql是一种关系型数据库,【区间访问】是很常见的一种情况,B+树叶节点增加的双向指针,加强了区间访问性,可使用在范围区间查询的情况。

1.4 发现索引

当使用id去查询数据时,效率很高,因为使用id可以利用B+树的特性,加速查询。

查询相同的记录,使用【id列】比使用【emil列】快了389倍,原因如下:

(1)使用id列可以利用B+树的特性,由上自下查询。

(2)使用email列只能从叶子节点进行【全表扫描】,一个一个的比较。

相关推荐
java1234_小锋4 分钟前
【技术专题】Mysql8 数据库 - Mysql8 添加,更新,删除数据
数据库·mysql
冰暮流星2 小时前
mysql之索引创建,查看,删除
数据库·mysql
福兮说4 小时前
IP 地址转整数的七个坑:192.168.1.1 算出负数、127.1 也是合法地址、存进 INT 直接溢出
javascript·网络·网络协议·tcp/ip·mysql·golang
Q26433650237 小时前
【有源码】基于Spring Boot和Vue的在线考试与交流系统-教育信息化背景下在线考试与交流一体化平台
java·vue.js·spring boot·mysql·spring·毕业设计·课程设计
都适、隶仁ミ7 小时前
【等保加固】MySQL5.7.38
运维·服务器·mysql·安全·等保
fengkai45458 小时前
十一、MySQL 第 4-7 章
运维·数据库·mysql
ao-weilai8 小时前
MySQL数据库:索引
数据库·mysql
Highcharts.js9 小时前
动态数据可视化架构:Highcharts + PHP + MySQL 从数据库到数据渲染
数据库·mysql·php·开发文档·实时数据·highcharts·图表开发
晚安日记wanna1 天前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
晚安日记wanna1 天前
索引建了却不走?7 个失效原因逐层排查
数据库·mysql·性能优化