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

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

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

相关文章:

  • 高性能无锁队列 moodycamel::ConcurrentQueue
  • Elasticsearch底层原理分析——新建、索引文档
  • Docker
  • C#中的迭代器和分部类
  • 2分钟快速实现非逻辑卷磁盘扩容
  • 异步组件与函数式组件
  • matlab提取特征(医学图像)
  • [架构之路-248]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化需求分析与面向对象需求分析的比较与融合
  • Flask Web开发实验一:第一个Flask项目与Flask的工作方式
  • Android 打包aar包含第三方aar 解决方案
  • 最新发布 Spring Boot 3.2.0 新特性和改进
  • 防爆智能安全帽、防爆手持终端,防爆智能矿灯守护安全,在煤矿安全生产远程可视化监管中的应用
  • 蓝桥杯day01——负二进制数相加
  • Lubuntu 23.10用户可使用LXQt 1.4桌面
  • 『亚马逊云科技产品测评』活动征文|AWS 存储产品类别及其适用场景详细说明
  • QMenu 是 Qt 框架中的一个类,用于创建和管理弹出式菜单
  • JavaEE(SpringMVC)期末复习(选择+填空+解答)
  • Jenkins 保姆级教程
  • 设计模式-迭代器模式
  • AMEYA360:村田首款1608M尺寸/100V静电容量1µF的MLCC实现商品化
  • 耿军强任陕西延安市领导,此前任陕西省公安厅机场公安局局长
  • 中国海外发展:今年前4个月销售665.8亿元,花费305亿元拿地
  • 2025年度上海市住房城乡建设管理委工程系列中级职称评审工作启动
  • 2025中国南昌国际龙舟赛5月23日启幕,是历年来南昌举办的最高规格龙舟赛事
  • 早期投资人蜂巧资本清仓泡泡玛特套现超22亿港元,称基金即将到期
  • 七大交响乐团在沪“神仙斗法”,时代交响奏出何等时代新声