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=25
且 email
时,不需要回表,因为索引叶子节点已经包含 email
。
2. 使用 id
作为主键,避免二级索引存储过大字段
✅ 选择短的 id
作为主键,因为 二级索引的叶子节点存储主键,如果主键是长字符串(如 UUID
),会导致 二级索引体积变大,影响查询性能。