B树和 B+树-如何优化索引,减少回表?

时间:2025-03-24 13:24:24

1. 覆盖索引(Covering Index)

定义:如果索引已经包含查询所需的所有列,则可以直接在索引 B+ 树中获取数据,避免回表。

优化方式

CREATE INDEX idx_age_email ON users(age, email);

这样,idx_age_email 叶子节点存储:

[22 → (3, c@mail.com)] → [25 → (1, a@mail.com)] → [30 → (2, b@mail.com)] → [35 → (4, d@mail.com)]

???? 查询 age=25email 时,不需要回表,因为索引叶子节点已经包含 email


2. 使用 id 作为主键,避免二级索引存储过大字段

选择短的 id 作为主键,因为 二级索引的叶子节点存储主键,如果主键是长字符串(如 UUID),会导致 二级索引体积变大,影响查询性能