什么是覆盖索引
Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 386
Author 回答者: shfshanyue
假设一个用户表 User(id primary, name unique, age)
,此时 name 为唯一索引。
聚合索引: select * from User where id in (1, 2, 3, 4, 5)
,由于 id 都在 B+ tree
的叶子节点,不需要去磁盘进一步 IO,称作聚合索引
假设有一个需求: 根据 name 查询该人对应的 age,在现有情况下是这样的:
- 根据 name 上的
B+ tree
快速找到该行对应的 id - 根据 id 上的
B+ tree
快速找到该行对应的 age,此时需要通过主键 id 进一步 IO,称作回表
如果建立一个联合索引 (name, age),直接在 name 上的 B+ tree
就可以找到它对应的 age,省了回表操作,称为覆盖索引