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 时,该索引即为覆盖索引。

相关推荐
小猿姐3 小时前
实测对比:哪款开源 Kubernetes MySQL Operator 最值得用?(2026 深度评测)
数据库·mysql·云原生
倔强的石头_5 小时前
从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台
数据库
TDengine (老段)6 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
GottdesKrieges6 小时前
OceanBase数据库备份配置
数据库·oceanbase
SPC的存折7 小时前
MySQL 8组复制完全指南
linux·运维·服务器·数据库·mysql
运维行者_7 小时前
OpManager MSP NetFlow Analyzer集成解决方案,应对多客户端网络流量监控挑战
大数据·运维·服务器·网络·数据库·自动化·运维开发
炸炸鱼.8 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
softshow10268 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess
数据库·mysql
Ronaldinho Gaúch9 小时前
MySQL基础
数据库·mysql