知识点专题话题 #4

MySQL 面试题:索引、事务与排查

面试之星官方的头像 面试之星官方 更新于

把 SQL、执行计划和事务现象连起来,形成可验证的数据库解题过程。

适用范围

MySQL / InnoDB;参考手册版本为 MySQL 8.4,实操请先核对服务器版本。

MySQL 面试准备应围绕两条主线展开:查询怎样找到数据,事务怎样在并发下保持业务约束。索引结构、执行计划、锁和隔离级别需要放进同一个具体场景,才能解释性能与正确性的取舍。

学习顺序

  1. SQL 执行路径。 从连接、解析、优化到存储引擎,区分查询语义与执行方式。
  2. 索引设计。 选一个有筛选、排序和分页的查询,说明联合索引的列顺序,以及增加索引带来的写入成本。
  3. 事务现象。 在两个数据库连接中复现更新与读取,记录隔离级别、执行顺序和观察结果。
  4. 定位慢查询。 先确认耗时与扫描规模,再检查执行计划、数据分布和锁等待。不要看到慢 SQL 就直接增加索引。

工程练习:订单列表

设想查询某个用户最近一个月的订单,按创建时间倒序展示。写下 WHERE、ORDER BY 和 LIMIT,再设计候选索引。在测试库中改变用户订单数量,比较计划与延迟。对于写入频繁的表,同时记录插入和更新的成本。

容易混淆的边界

事务的原子性不意味着任意业务流程天然正确。应用中的先读后写、重复请求、跨系统调用仍需要明确约束。隔离级别的名称也不能代替具体 SQL 与访问路径分析。

完成后,应能解释“为什么选这个索引”“它在哪些查询上无效”“如何用实验验证”。

参考资料

相关学习路线

安排复习节奏

30 天 Java 面试计划

MySQL题库

共 81 道题

按题库默认顺序排列,可选择分类集中练习。

显示 81 道题

  1. 数据库的基本概念和数据库的分类 基础与综合
  2. 关系型数据库和非关系型数据库区别 基础与综合
  3. 数据库三范式 表设计与数据类型
  4. 手写 SQL:表中有 user_id 和 price 两个字段,查出 user_id = 1 时的最大 price SQL 语句与练习
  5. 手写 SQL:删除表中重复的数据,只保留其中一条记录 SQL 语句与练习
  6. 手写 SQL:查询前七天数据 SQL 语句与练习
  7. 手写 SQL:查询销量前十的商品信息 SQL 语句与练习
  8. 手写 SQL:有一张订单表,status 字段表示某个订单的状态,如何查询出各个状态的百分比 SQL 语句与练习
  9. 手写 SQL:有学生表和成绩表,请分别查询没考试的学生信息、参加了两门考试的学生 SQL 语句与练习
  10. 手写 SQL:计算新用户首日留存率 SQL 语句与练习
  11. 口述:MySQL 如何做基于权重的搜索? SQL 语句与练习
  12. where 和 having 的区别 SQL 语句与练习
  13. innerjoin、leftjoin、rightjoin、union 的区别 SQL 语句与练习
  14. drop、turncate、delete 的区别 SQL 语句与练习
  15. char 和 varchar 的区别,哪个索引效率更高? 表设计与数据类型
  16. datetime 和 timestamp 的区别 表设计与数据类型
  17. MySQL 组成部分,一条 SQL 查询语句怎么执行的 执行过程与存储引擎
  18. 还知道有什么存储引擎么(MyISAM),这些存储引擎的区别 执行过程与存储引擎
  19. InnoDB count(*) 要全表扫描,为什么不像 MyIsam 一样保存表的具体行数呢? 执行过程与存储引擎
  20. InnoDB 存储引擎的数据组织形式 执行过程与存储引擎
  21. MySQL 是怎么存储 NULL 的? 表设计与数据类型
  22. MySQL 建表需要注意什么 表设计与数据类型
  23. MySQL 索引底层结构(B/B+ 树原理与区别) 索引
  24. B 树对比 B+ 有什么优点吗?有没有什么场景用的是 B 树而不是 B+ 树? 索引
  25. 你了解的数据库(除了 MySQL)还有哪些结构的索引 索引
  26. MySQL 索引为什么要用 B+ 树?为什么不用红黑树?为什么不用跳表? 索引
  27. B+ 树一般有多少层 索引
  28. 索引的优点和缺点(为什么要用索引) 索引
  29. 建索引的时候有什么需要遵循什么原则?(哪些字段适合建立索引) 索引
  30. 一张表最多可以创建多少个索引? 索引
  31. MySQL 都有哪些类型的索引 索引
  32. 唯一索引和普通索引有什么区别,该如何选择? 索引
  33. MySQL 聚集索引 (主键索引) 和非聚集索引 (辅助索引/普通索引) 的区别 索引
  34. 主键索引和唯一索引的区别 索引
  35. 什么是外键?大企业为什么不推荐使用外键 表设计与数据类型
  36. 联合索引的最左匹配原则:为什么得最左匹配,不按照这个来为什么失效? 索引
  37. 索引下推了解过么 索引
  38. 假如有(a,b,c) 联合索引,查询语句条件是 a = x and b > y and c = z,分析索引使用情况 索引
  39. 假如有(a,b,c) 联合索引,select * from table where c = x and b = x and a = x 这条语句能用到(a,b,c)联合索引吗,sql 执行之前是否会将 c b a 的查询顺序改为 a b c 吗? 索引
  40. 如何评价下述这样的联合索引的组织方式?将联合索引(A,B)设计成先分别以 A 和 B 构建两棵 B+ 树,然后将 A 字段的 B+ 树的叶子结点指向 B 字段的 B+ 树 索引
  41. 优化 SQL 语句:select * from t where t.a > ? and t.b = ? or t.c = ? order by t.d desc limit 10 查询优化与连接池
  42. 讲讲回表查询和覆盖索引,为什么需要覆盖索引 ,可以使用覆盖索引优化的场景 索引
  43. 前缀索引了解吗,为什么要建前缀索引 索引
  44. select * from A join B on A.id = B.id;执行过程性能差,原因可能是?哪里需要建立索引? 索引
  45. 什么情况下用 like 查询(模糊查询)效率会比较低? 查询优化与连接池
  46. 全文索引和倒排索引 索引
  47. 索引在哪些情况下会失效 索引
  48. 主键乱序 insert 和顺序 insert 的性能对比(页分裂问题) 索引
  49. 说一下 MySQL 的事务(ACID 特性) 事务与锁
  50. MySQL 具体有哪些锁、粒度和开销 事务与锁
  51. 为什么要有意向锁? 事务与锁
  52. InnoDB 有哪几种行锁? 事务与锁
  53. InnoDB 行锁的内部实现原理是什么 事务与锁
  54. 一条 update 语句没有带 where 条件 / 带了 where 条件没有命中索引、两条 update 语句更新同一条记录 / 更新同一条记录的不同字段,分别加的是什么锁 事务与锁
  55. 什么情况下会加临键锁、什么情况下会加记录锁(加锁规则) 事务与锁
  56. MySQL 自增锁 事务与锁
  57. MySQL 会出现死锁吗?什么场景? 事务与锁
  58. 数据库的悲观锁和乐观锁怎么实现 事务与锁
  59. 有哪些隔离级别,分别解决什么问题(丢失更新、脏读、不可重复读、幻读) 事务与锁
  60. 四种隔离级别是怎么实现的(详细说说 MVCC 的原理) 事务与锁
  61. MySQL 解决幻读了吗,是如何解决的 事务与锁
  62. 先 update 再 select,update 操作没 commit 之前执行 select 会阻塞吗? 事务与锁
  63. 目前很多电商公司都把隔离级别设置为了读已提交,为什么这样设置,优缺点? 事务与锁
  64. binlog、redolog、undolog 的区别和作用 日志与恢复
  65. 为什么说 redolog 具有崩溃恢复的能力 日志与恢复
  66. redolog 怎么做崩溃恢复的(redo log 如何保证事务持久性 / WAL 策略、CheckPoint 技术) 日志与恢复
  67. 一条 SQL 更新语句是如何执行的(redo log 两阶段提交、redo log 和 bin log 一致性问题) 日志与恢复
  68. 事务还没提交的时候,redo log 有没有可能被持久化到磁盘呢?(MySQL 是如何保证数据不丢失的呢?) 日志与恢复
  69. MySQL 主从复制原理 复制与扩展
  70. MySQL 主从/主备如何保证数据一致性? 复制与扩展
  71. 如何保证 MySQL 高可用 复制与扩展
  72. 什么是慢 SQL (慢查询)?如何分析 (Explain、Profiling) 查询优化与连接池
  73. 怎么提高 MySQL 读写效率(SQL 优化) 查询优化与连接池
  74. 数据库是如何实现分页的,假设有 100 万条数据如何优化分页查询? 查询优化与连接池
  75. 数据库分库分表了解过吗,具体讲一下什么场景,怎么做 复制与扩展
  76. 说一下数据库路由组件怎么实现的 复制与扩展
  77. 分库分表中间件了解么 复制与扩展
  78. 数据库从旧表切换到新表,怎么做到对用户无感? 复制与扩展
  79. MySQL 的性能极限和瓶颈是什么样的,具体的表现是什么样的。怎么确认性能瓶颈是数据库出现瓶颈还是你的 JavaWeb 程序出现瓶颈 查询优化与连接池
  80. 介绍下 MySQL 线程池、启动 MySQL 线程池配置参数相关的有哪些 查询优化与连接池
  81. 数据库连接池有哪些?连接池的作用?如何合理设置连接池参数? 查询优化与连接池

评论 0 友善交流,让每个问题都有回响

还没有评论,分享你的看法吧。