mysql的索引中b+树的具体结构和特点?

1 个回答

  • 法犸
    人一旦不害怕失去,态度就会变得随意,随你意,你随意。
    ### 1. 结构组成 MySQL(InnoDB 引擎)索引底层是 **B+ 树**,是一种多路平衡搜索树,和普通 B 树相比有以下结构特征: * **非叶子节点**:只存储键值(Key)和子节点指针,不存储实际数据。 * **叶子节点**: * **聚簇索引**(主键索引):叶子节点存储整行数据。 * **二级索引**(辅助索引):叶子节点存储主键值(回表用)。 * **叶子节点链表**:所有叶子节点通过双向链表相连,便于区间扫描。 * **节点存储多键**:每个节点可以存多个键(由页大小决定,InnoDB 一页默认 16KB)。 ### 2. 查找过程 * 从根节点开始,二分查找找到范围,再沿指针下钻到叶子节点。 * 叶子节点找到目标记录(聚簇索引直接返回,二级索引需回表)。 * 区间查询时,通过叶子链表连续扫描。 ### 3. 特点 1. **磁盘友好** * 多路(而非二叉),树高低,一般 3\~4 层即可存储千万级记录,减少磁盘 I/O。 2. **范围查询高效** * 叶子节点有序且双向链表连接,适合 `BETWEEN`、`ORDER BY`、`<`、`>` 等范围查询。 3. **稳定的查询性能** * 树的高度平衡,不会像链表或二叉树那样退化。 4. **聚簇索引的局限** * 表数据按主键物理排序,插入非顺序主键会造成页分裂,影响性能。 ### 4. 对比 B 树的改进 * **B 树**:数据可以存在非叶子节点和叶子节点中。 * **B+ 树**: * 所有数据都在叶子节点,非叶子节点仅作索引目录,提高磁盘页利用率。 * 叶子节点链表可顺序遍历,范围查询更快。
    发布于 2025-08-11 15:59 •IP属地 内蒙古
    举报
    评论
    收藏