当前位置: 首页 > news >正文

mysql中数据是如何被用B+树查询到的

innoDB是按照页为单位读写的
在这里插入图片描述
那页中有很多行数据,是怎么执行查询的呢,首先我们肯定,是以单向列表形式存储的,提高了增删的效率,但是查询效率低。所以实际上对页中的行数据进行了优化,能以二分的方式进行查询,执行这一操作的机制叫做页目录,在页的内部建立分组(包括最大和最小记录,但不包括被删除了的记录)。按照从小到大顺序排列,每组的最大的记录的头信息(file_header)存储着本组记录的数量(见粉红色字段)。页目录存储的是最后一条记录的地址偏移量(槽、slot,相当于页目录有个指针,指向每个组的最后一条记录)。所以二分就能根据每个slot的最大值判定当前查询应该去哪个分组。
在这里插入图片描述
然后我们抽象到更高层次,页如何被查询的?其实B+树的每个节点都是一页,只不过非叶子节点的数据是指针。叶子节点才是真的数据。
在这里插入图片描述
然后索引又分为聚簇索引和二级索引。
聚簇索引一般是主键索引,如果没有主键就选不包含NULL值得唯一列,如果还没有MySQL会创建一个隐藏的自增id列当作聚簇索引。聚簇索引叶子节点存的是真实数据。
二级索引就是建立的索引,叶子节点存放的是主键值,也就是说用了二级索引,查到后,还要用查到的主键值再查一遍聚簇索引才能获取数据结果,这个过程叫做回表。但假如你要查的就是主键,那就只查一次即可。

http://www.lryc.cn/news/240164.html

相关文章:

  • Redisson 分布式锁的最佳实践
  • ArkTS声明式开发范式
  • 史诗级云故障敲响警钟,应用保障不能没有“连续键”!
  • SSH连接远程服务器报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 解决方法
  • 数据库——查询连续的月份
  • git代码提交命令(如何提交代码)
  • jmeter中调用python代码
  • 当当网获得dangdang商品详情商品列表API 测试请求入口
  • git如何查看配置,修改配置,设置配置
  • 交通流合成数据生成原理及实现代码
  • leetcode 240. 搜索二维矩阵 II
  • a标签超链接 —— 实现点击前中后变色
  • 【好玩的开源项目】Linux系统之部署proxx扫清黑洞小游戏
  • IDEA-SVN合并分支到主干
  • kettle如何写日志
  • 新能源车将突破2000万辆,汉威科技为电池安全保驾护航
  • 基于文心一言AI大模型,编写一段python3程序以获取华为分布式块存储REST接口的实时数据
  • 2022-4-11 南科大现代控制与最优估计
  • 【注册Huggingface】获取token
  • 【蓝桥杯软件赛 零基础备赛20周】第4周——简单模拟1
  • 使用OpenCV将图像转换为NV12格式并加载NV12数据
  • 【Lodash】 Filter 与Map 的结合使用
  • python命令行 引导用户填写可用的ip地址和端口号
  • 【小黑送书—第九期】>>重磅!这本30w人都在看的Python数据分析畅销书:更新了!
  • 关于APP备案的通知以及APP备案的常见问题
  • iOS 17.0 YYText 崩溃处理
  • 微信小程序面试题【100道】
  • 【nlp】2.8 注意力机制拓展
  • mysql 存储引擎ROWS与实际行数不一致
  • 软考小记-软件工程