MST

星途 面试题库

面试题:MySQL中B+树索引的结构特点有哪些

请详细阐述MySQL中B+树索引的结构特点,比如节点类型、数据存储位置等方面。
35.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

节点类型

  1. 叶子节点
    • 包含了所有的用户数据。数据以键值对的形式存储,键是索引列的值,值可以是对应行的其他列数据或者是指向实际数据行的指针(根据不同的存储引擎有所不同,如InnoDB存储引擎中,对于聚簇索引,叶子节点存储的是整行数据;对于二级索引,叶子节点存储的是索引列和主键值)。
    • 叶子节点之间通过双向链表相连,这样可以方便地进行范围查询,按照键值顺序遍历链表即可获取范围内的数据。
  2. 非叶子节点
    • 只存储键值,不存储实际数据。其作用是引导查询,通过比较键值来决定搜索的方向,将查询请求导向合适的子节点。非叶子节点的键值数量比叶子节点少,以减少节点占用的空间,提高树的高度和查询效率。每个非叶子节点包含若干个键值和指向子节点的指针,指针数量比键值数量多一个。

数据存储位置

  1. 数据存储在叶子节点:在B+树索引中,实际的数据记录都存储在叶子节点。这使得在查询时,只要找到叶子节点,就能获取到对应的数据。例如,当执行一个基于索引列的精确查询时,从根节点开始,通过比较键值不断向下搜索,最终到达叶子节点获取数据。
  2. 聚簇索引与非聚簇索引
    • 聚簇索引:InnoDB存储引擎的聚簇索引叶子节点直接存储了整行数据。因为数据物理存储顺序与索引顺序一致,所以对于基于主键的查询非常高效。但由于数据物理存储依赖于聚簇索引,插入新数据时,可能需要移动大量数据来维护聚簇索引的顺序,特别是在数据页已满的情况下。
    • 非聚簇索引(二级索引):叶子节点存储的是索引列和主键值。当通过二级索引查询时,先在二级索引的叶子节点找到主键值,然后再通过主键值在聚簇索引中查找完整的数据行,这种方式称为回表操作。所以基于二级索引的查询通常比基于聚簇索引的查询多一次I/O操作。