当前位置: 首页 > news >正文

【大白话说Java面试题 第71题】【Mysql篇】第1题:索引是什么?

📌PDF:大白话说Java面试题 — 03-Mysql篇

第1题:索引是什么

📚回答:

  • 核心考点
    索引是数据库性能优化的核心手段。大厂面试要求能说出本质(数据结构)作用(快 vs 慢)代价(存储 + 写放大),并能解释为什么不是越多越好

1. 索引的本质
  • 定义
    索引是排好序数据结构(MySQL InnoDB默认为B+Tree),用于快速定位数据行,避免全表扫描。

  • 时间复杂度对比

    • 无索引:全表扫描 O(N)
    • 有索引(B+Tree):O(log N)

2. 索引的工作原理(B+Tree简解)
特性说明
多路平衡树每个节点存储多个key,树高度低(通常2~4层)
叶子节点存放数据(聚簇索引)或主键值(二级索引)数据只存在叶子节点
叶子节点双向链表支持范围扫描(BETWEEN><
非叶子节点只存key + 指针可全部缓存在内存中,加速查找

图示逻辑

[根节点] → 分支节点 → 叶子节点(数据页) → 叶子节点 → 叶子节点(双向链表)

3. 索引的类型与特点
索引类型说明叶子节点内容是否必须回表
主键索引(聚簇索引)表的主键自动建立完整行数据
二级索引(非聚簇索引)普通/唯一/联合索引主键值(需回表)
唯一索引列值唯一,可null同二级索引
联合索引多列组合主键值
全文索引文本分词检索特殊格式特殊
哈希索引(Memory引擎)等值查询快数据指针不支持范围

关键点

  • 每张表只有一个聚簇索引(主键无则选第一个唯一非空列,再无则隐藏row_id)
  • 二级索引查到的只是主键值,需要再查主键索引才能得到完整行 →回表

4. 索引的优缺点(面试必背)
优点缺点
查询速度提升(O(N) → O(log N))占用额外磁盘空间(通常为数据的1%~5%)
唯一索引保证数据唯一性INSERT/UPDATE/DELETE 变慢(需同步更新索引)
加速排序(ORDER BY索引过多影响写性能,优化器选错索引
加速分组(GROUP BY过长字段建索引浪费空间

公式

索引不是越多越好。读多写少可多建,写多读少需控制数量。


5. 联合索引与最左前缀原则(高频面试题)

联合索引示例INDEX(a, b, c)

查询条件是否使用索引使用哪些列
WHERE a = 1a
WHERE a = 1 AND b = 2a, b
WHERE a = 1 AND b = 2 AND c = 3a, b, c
WHERE a = 1 AND c = 3✅(部分)a(c用索引下推)
WHERE b = 2无(缺最左列a)
WHERE a = 1 ORDER BY ba 索引,b 利用排序
WHERE a = 1 ORDER BY c✅(但需filesort)a 索引,c 不能直接排序

最左前缀原则

  • 查询条件必须从索引最左列开始,且不能跳过中间列
  • 跳过一列,后面的列无法用于索引查找,但可能用于索引下推(ICP)

6. 回表与覆盖索引(大厂深度)

回表

  • 二级索引查到主键 → 再去聚簇索引查完整行
  • 代价:每次回表是一次随机I/O,回表行数多时性能下降

覆盖索引

  • 当查询的所有列都在索引中时,不需要回表
  • 示例:
    -- 索引:INDEX(name, age)SELECTname,ageFROMuserWHEREname='张三';-- 覆盖索引,不回表SELECTname,age,idFROMuserWHEREname='张三';-- 回表(id可能不在索引)

优化技巧:把频繁查询的字段放入联合索引,变成覆盖索引。


7. 索引失效典型场景(面试必考)
场景原因示例(假设索引name
函数操作索引列被计算/函数WHERE LOWER(name) = 'zhang'
隐式类型转换字符串列传intWHERE name = 123(转字符串比)
使用!=<>不等号很难用索引WHERE age <> 30
LIKE '%abc'通配符开头的模糊匹配WHERE name LIKE '%张'
OR未全索引OR两边不全有索引WHERE name='a' OR age=30(age无索引)
联合索引不遵循最左前缀缺少最左列索引(a,b)WHERE b=1

8. 面试官追问示例

Q1:为什么不建议在低基数列(如性别)建索引?
A:低基数(如性别只有男/女)索引选择性差。查询WHERE gender='男'可能返回50%数据,优化器会全表扫描而不是用索引。

Q2:B+TreeB-Tree区别?
A:B+Tree非叶子节点不存数据,叶子节点存全部数据且双向链表,更适合范围查询和顺序扫描。MySQL InnoDB使用B+Tree。

Q3:主键用UUID有什么问题?
A:UUID随机无序,插入时页分裂频繁,写性能差;且占用16字节,二级索引叶子节点存储主键值,空间浪费大。推荐自增整型/BigInt。

Q4:什么是索引下推(ICP)?
A:MySQL 5.6+优化。联合索引中,存储引擎层先过滤可用的索引列,减少回表次数。比如INDEX(a,c)WHERE a=1 AND c=2,先用c=2过滤再回表。

Q5:一条查询同时有联合索引(a,b)和单列索引a,优化器会选哪个?
A:通常选(a,b),因为能覆盖更多条件。但优化器会基于代价估算(IO+CPU),如果a列重复度高可能走单列。


9. 总结对比表
维度无索引有索引
查询速度慢(全表扫描)快(O(log N))
写入速度慢(需维护索引)
磁盘占用高(额外空间)
维护成本高(索引选择、重建)

💡面试官想要的满分总结

“索引本质上是排好序的B+Tree数据结构,通过二分查找和树的高度压缩实现快速数据定位,避免全表扫描。
优点是查询效率极高,缺点是占用磁盘拖慢写操作
需掌握聚簇/二级索引区别、最左前缀原则回表与覆盖索引,并熟悉索引失效的典型场景(函数、隐式转换、LIKE ‘%…’)。
生产建索引口诀:等值查前置、区分度高的靠前、覆盖索引优化回表、写多读少谨慎加。”


觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯

http://www.gsyq.cn/news/1355869.html

相关文章:

  • 深入CPU内部:8086的MUL指令是如何工作的?从硬件视角理解乘法结果为何放在AX和DX
  • Windows 11终极指南:如何使用WSA Toolbox轻松安装Android应用
  • 【律所内部禁传】Claude法律文档分析的5个致命误用场景:第3种正导致尽调报告失效!
  • AI落地:从虚假阵痛到赋能,企业如何平衡技术与人的价值?
  • 高效掌握YOLOv8-face人脸检测:3种实用场景实战指南
  • 从执行计划到语义重写,Claude自动优化SQL的7层决策链,你只掌握了第1层?
  • 别再乱关防火墙了!ESXi 7.0/8.0 安全开放自定义端口的保姆级教程(附配置文件详解)
  • 终极指南:5步永久免费解锁Cursor AI Pro功能,告别试用限制
  • 工业级i.MX6主板:双路高清视频与CAN/RS485数据综合采集方案
  • UVa 275 Expanding Fractions
  • 安卓HTTPS抓包证书信任问题深度解析与系统级迁移方案
  • TrafficMonitor插件完整指南:让你的Windows任务栏变身全能信息中心
  • 从开发者反馈看taotoken api密钥管理与访问控制功能的实用性
  • 如何快速搭建跨平台漫画阅读器:Tachidesk-Sorayomi一站式配置指南
  • 利用Taotoken统一API简化多模型应用的原型开发
  • STM32新手避坑指南:用CubeMX+HAL库驱动HC-SR04超声波模块(附完整代码)
  • 摆脱论文困扰!2026年必备AI论文写作软件榜单,高质初稿轻松写
  • 构建AI模型实时反馈回路:从概念漂移到持续进化
  • 如何在苹果电脑上无缝运行Windows应用:Whisky终极指南
  • C/C++高精度算法的实现
  • 量子优化新方法:中途测量与相干反馈提升算法性能
  • 在无MMU的RISC-V MCU上移植Linux 6.10内核:基于HPM6360的实践指南
  • FANUC机器人摆焊+电弧跟踪实战:从参数详解到避坑指南(ROBOGUIDE仿真)
  • 如何快速掌握FileBrowser:面向初学者的完整Web文件管理教程
  • 3个真实故事告诉你:为什么你的Windows 11需要系统优化工具
  • 专业干货!AI专著写作工具推荐,一键生成20万字专著不是梦!
  • 2026深度实测:16款降AIGC平台测评,闭眼入这款就对了!
  • 智能安全防护识别数据集 高空作业安全带检测 安全带佩戴检测 安全带穿戴规范识别数据集 未正确佩戴安全防护措施识别 10186期
  • 2026年5月最新岳阳华容黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐 - 金诚回收
  • Mi-Create:免费开源的小米手表表盘制作终极指南