MySQL面试题——索引2nd

总结于JavaGuide

知识点总结

为什么 InnoDB 没有使用哈希作为索引的数据结构?

为什么 InnoDB 没有使用 B 树作为索引的数据结构?

什么是覆盖索引?

回答

1. 为什么 InnoDB 没有使用哈希作为索引的数据结构?

哈希索引仅支持等值查询 ,无法满足范围查询、排序、前缀匹配等高频业务需求;且 InnoDB 采用聚簇索引模型,依赖有序的数据结构 来组织行数据,哈希的无序性无法适配。此外,InnoDB 仅提供自适应哈希索引作为辅助优化,而非主索引结构。

2. 为什么 InnoDB 没有使用 B 树作为索引的数据结构?

InnoDB 选择 B+ 树而非 B 树,核心是适配磁盘 IO 特性 :B 树的非叶子节点会存储数据,导致单节点能容纳的索引项更少,树的高度更高,磁盘 IO 次数更多;B+ 树的非叶子节点仅存索引键,叶子节点存储完整数据(聚簇索引)且通过双向链表连接,既降低了树高、减少了 IO,又能高效支持范围查询和全表扫描,更契合业务需求。

3. 什么是覆盖索引?

覆盖索引是指索引中包含了查询所需的全部列 ,查询时无需回表到聚簇索引中获取额外数据,直接通过该索引即可完成查询。其核心优势是减少磁盘 IO 次数 ,大幅提升查询效率。例:联合索引 (id, name),执行 select name from user where id = 1 时,该索引即为覆盖索引。

相关推荐
沉默王二4 分钟前
面试结束后,我反问:“就面个实习至于上这么大强度吗?”面试官:“你对 RAG、Agent、MCP、Skill 理解得很到位,所以要求高一点。”
面试·agent·ai编程
假如让我当三天老蒯2 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
假如让我当三天老蒯1 天前
前端跨域解决方案(学习用)
前端·javascript·面试
Colin草率地做慢慢地改1 天前
关于QuickStore这个项目的重构(2)- 数据库建表文件
后端·面试·架构
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
JustHappy2 天前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom2 天前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github
倔强的石头_2 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
假如让我当三天老蒯2 天前
模块化:ES Module 与 CommonJS 的区别
前端·面试
云技纵横2 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql