第 8 章 · 02 B+树索引:数据库的标准索引 本节摘要:几乎所有数据库都用 B+树做索引——它高扇出(每节点很多键)、矮胖(深度浅,IO 次数少)、叶子链表(范围查询友好)。本节讲清 B+树与二叉树/哈希表的对比,它的结构(非叶子只存键与子指针、叶子存数据并串联),以及插入时的页分裂。理解 B+树,你就理解了「为什么数据库索引这么快」「为什么用 B+树而非二叉树」。 内容来源:基于数据库索引整理的导读。 学习目标 说清 B+树的结构:非叶子(键+子指针)、叶子(数据+链表)。 解释 B+树相对二叉树(太深)、哈希(无范围查询)的优势。 描述插入与页分裂。 理解「聚簇索引」(数据本身存在 B+树叶子)。 一、学习价值:索引是数据库的灵魂 数据库快,很大程度上靠索引。
本节摘要:几乎所有数据库都用 B+树做索引——它高扇出(每节点很多键)、矮胖(深度浅,IO 次数少)、叶子链表(范围查询友好)。本节讲清 B+树与二叉树/哈希表的对比,它的结构(非叶子只存键与子指针、叶子存数据并串联),以及插入时的页分裂。理解 B+树,你就理解了「为什么数据库索引这么快」「为什么用 B+树而非二叉树」。
内容来源:基于数据库索引整理的导读。
数据库快,很大程度上靠索引。而索引的事实标准是 B+树(或其变体如 B-tree、LSM-Tree)。理解 B+树,你才理解:
WHERE age BETWEEN 20 AND 30 快(叶子链表)。[键10 | 键20 | 键30] ← 根(非叶子, 只存键与子指针) / | | \ [1,5,8] [10,12,15] [20,25] [30,35,40] ← 叶子(存数据, 用链表串联) → → → →
BETWEEN、<)与排序(ORDER BY)。插入新键:沿树找到对应叶子页,插入。若叶子页满了,分裂:取半键建新页,中间键上推到父节点。父节点满同样分裂,可能一路传到根(根分裂,树加深一层)。
「聚簇索引」:数据本身按主键存在 B+树的叶子里(而非单独存)。主键查询直接拿到数据。一个表通常只有一个聚簇索引(主键),其他索引(非聚簇)存「主键值」,需二次查找。
下一节讲数据的插入与查询(把前两节合起来)。