数据库面试问题-MySQL版

数据库常见面试题

数据库面试核心问题清单 (带回答区)

第一层:基础知识与SQL掌握程度

1. SQL 语句

  • 问题: 你能写一个包含多表连接、分组和过滤的复杂查询吗?(例如:查询每个部门去年入职的、平均薪资高于公司平均水平的员工信息)

    • 回答:
      1
      2
      3
      -- 在这里写下你的SQL
      SELECT * from User u join departments d on u.user_id = d.user_id where 入职时间 > '2024-01-01'and 入职时间 < '2025-01-01'
      and u.salary > (select avg(salary) from User)
  • 问题: INNER JOIN, LEFT JOIN, RIGHT JOIN 的区别是什么?

    • 回答:
    • join是数据库中的多表关联查询,INNER JOIN代表内连接,LEFT JOIN代表左连接,RIGHT JOIN代表右连接。
    • INNER JOIN:返回两个表共有的行。
    • LEFT JOIN:返回左表所有行,即使右表没有匹配的行。
    • RIGHT JOIN:返回右表所有行,即使左表没有匹配的行。
  • 问题: WHEREHAVING 子句的区别是什么?

    • 回答:
    • WHERE 子句:用于过滤数据,返回满足条件的行。
    • HAVING子句:用于过滤分组后的数据。
  • 问题: UNIONUNION ALL 的区别是什么?

    • 回答:
    • UNION:返回多个结果集的并集。
    • UNION ALL:返回多个结果集的并集,但保留重复行。
  • 问题: 什么是窗口函数?请举例说明 ROW_NUMBER() 的使用场景。

    • 回答:
    • 用于在不分组的前提下,对记录进行分区、排序和聚合计算。它不会减少结果行数,适用于很多排名、累计、分组内统计等高级查询场景
    • ROW_NUMBER()多数用于每个分组中选出第1名,例如每个部门查询薪资最高的人
  • 问题: 你如何定位并优化一条慢查询SQL?EXPLAIN 命令你会用吗?
    - 回答:
    - 通过EXPLAIN命令查看SQL执行计划,通过查看执行计划,可以知道SQL执行过程中哪些步骤使用了索引,哪些步骤没有使用索引,从而判断出哪些SQL执行效率较低。

2. 索引

  • 问题:(必考) 什么是数据库索引?它的主要作用是什么?

    • 回答:
  • 问题: 索引为什么能提高查询速度?它的底层数据结构通常是什么?

    • 回答:
  • 问题: 为什么数据库索引常用B+树而不是B树、哈希表或红黑树?

    • 回答:
  • 问题:(必考) 什么是聚簇索引和非聚簇索引(二级索引)?它们有什么区别?

    • 回答:
  • 问题:(高频) 什么是“回表”?在什么情况下会发生?

    • 回答:
  • 问题: 如何避免回表操作?(引出覆盖索引)

    • 回答:
  • 问题: 什么是覆盖索引?

    • 回答:
  • 问题: 设计数据库索引时,你会遵循哪些原则?

    • 回答:
  • 问题:(高频) 什么是索引的“最左前缀原则”?请举例说明。

    • 回答:
  • 问题: 在哪些情况下,即使创建了索引,查询也不会使用它(索引失效)?

    • 回答:

3. 事务

  • 问题:(必考) 什么是数据库事务?

    • 回答:
  • 问题:(必考) 请解释一下事务的ACID四大特性。

    • 回答:
      • A (Atomicity):
      • C (Consistency):
      • I (Isolation):
      • D (Durability):
  • 问题: 并发事务可能会导致哪些问题?(脏读、不可重复读、幻读)

    • 回答:
  • 问题: 数据库的四种隔离级别分别是什么?它们各自解决了哪些并发问题?

    • 回答:
  • 问题: MySQL InnoDB存储引擎默认的事务隔离级别是什么?

    • 回答:

第二层:数据库引擎与锁机制

1. 存储引擎

  • 问题: MySQL的InnoDB和MyISAM存储引擎有什么核心区别?

    • 回答:
  • 问题: 在现代应用中,为什么我们通常选择使用InnoDB?

    • 回答:

2. 锁机制

  • 问题: 数据库中的锁有哪些分类?(从锁粒度、锁模式等角度回答)

    • 回答:
  • 问题: 什么是共享锁(读锁)和排他锁(写锁)?

    • 回答:
  • 问题:(高频) 什么是乐观锁和悲观锁?它们各自的实现方式和应用场景是什么?

    • 回答:
  • 问题:(高频) 什么是MVCC(多版本并发控制)?它的实现原理是什么?

    • 回答:
  • 问题:(进阶) 什么是间隙锁(Gap Lock)和临键锁(Next-Key Lock)?它们解决了什么问题?

    • 回答:
  • 问题: 什么是死锁?死锁产生的条件是什么?如何排查和避免死锁?

    • 回答:

第三层:性能优化与架构设计

1. 性能优化

  • 问题:(场景题) 如果线上一个接口响应很慢,你怀疑是数据库问题,你的排查思路是怎样的?

    • 回答:
  • 问题: EXPLAIN 命令的输出结果中,你最关注哪些字段?(例如 type, key, rows, Extra

    • 回答:
  • 问题: 当一张表的数据量达到千万甚至上亿级别时,你会考虑哪些优化方案?

    • 回答:
  • 问题: COUNT(*)COUNT(1)COUNT(列名) 有什么区别?哪个性能更好?

    • 回答:

2. 数据库架构

  • 问题: 为什么要进行分库分表?

    • 回答:
  • 问题: 分库分表有哪些常见方案?(水平切分 vs 垂直切分)

    • 回答:
  • 问题: 分库分表后会带来哪些新的挑战?(如分布式事务、跨库查询、全局唯一ID等)

    • 回答:
  • 问题: 数据库主从复制的原理是什么?Binlog在其中扮演什么角色?

    • 回答:
  • 问题: 你是否遇到过主从延迟的问题?可能的原因是什么?如何解决?

    • 回答:
  • 问题: 什么是读写分离?它的实现方案有哪些?

    • 回答:

3. 项目实践

  • 问题:(必考) 请分享一个你在项目中做过的数据库优化案例。

    • 回答:
      • 背景描述: 遇到了什么问题?
      • 分析过程: 你是如何定位问题的?
      • 解决方案: 你采取了什么措施?为什么?
      • 最终效果: 优化结果如何?有量化数据吗?
  • 问题: 你们项目中的数据库备份策略是怎样的?

    • 回答:


数据库面试问题-MySQL版
https://mazepeng.com/2025/06/26/database/数据库面试问题-MySQL版/
作者
马泽朋
发布于
2025年6月26日
许可协议