极客时间返利平台,你可以在上边通过山月的链接购买课程,并添加我的微信 (shanyue94) 领取返现。
每天晚上九点 B站讲解前端工程化直播,并解答相关问题。

# 什么是覆盖索引

Issue

欢迎在 Gtihub Issue 中回答此问题: Issue 386 (opens new window)

假设一个用户表 User(id primary, name unique, age),此时 name 为唯一索引。

聚合索引: select * from User where id in (1, 2, 3, 4, 5),由于 id 都在 B+ tree 的叶子节点,不需要去磁盘进一步 IO,称作聚合索引

假设有一个需求: 根据 name 查询该人对应的 age,在现有情况下是这样的:

  1. 根据 name 上的 B+ tree 快速找到该行对应的 id
  2. 根据 id 上的 B+ tree 快速找到该行对应的 age,此时需要通过主键 id 进一步 IO,称作回表

如果建立一个联合索引 (name, age),直接在 name 上的 B+ tree 就可以找到它对应的 age,省了回表操作,称为覆盖索引

Last Updated: 11/27/2021, 10:11:48 AM