常考面试题
2026/2/9大约 3 分钟
一、基础 & SQL 能力(必考)
MySQL 中 CHAR 和 VARCHAR 的区别是什么?各自的适用场景?
- Char 的话长度是没有限制的,是动态变化的,而 Var caht 是定长的
WHERE、HAVING、ON 的执行时机和区别是什么?
1.INNER JOIN、LEFT JOIN、RIGHT JOIN 的区别是什么?什么时候会产生 NULL?
- inner join 是内连接,是既符合左表同时又满足右表的数据才会被查询出来
- LEFT JOIN 是左链接,左表中的数据都会存在,再根据链接的id到右表查询,如果查询不到,则使用null 来代替
- RIGHT JOIN 同理
MySQL 中 NULL 和空字符串
''有什么区别?索引对它们的处理一样吗?- NULL 是代表这个字段的值是空的,而空字符串是占用空间的。索引处理也不一样
COUNT(*)、COUNT(1)、COUNT(列名) 的区别是什么?性能上有差别吗?
- 在现代的数据库当中,count(*) 和count(1)基本上没有区别,都是统计查询出来的数据的行数,不管是否为null
- 而COUNT(列名) 是统计该列值不为null 的数量、性能上几乎没有区别
二、索引(面试重灾区)
什么是索引?MySQL 为什么使用 B+ 树而不是 B 树或 Hash?
- 首先索引就是一个数据结构。它就像一本书的目录一样,可以通过索引很快的找到数据在哪里。
- B+树首先从结构上来看,它是一颗矮胖型型的,也就是高度不高、分叉多。mysql 的数据是通过页来存储的,每一页数据存储在叶子上,并且它的叶子节点是通过双向链表的结构来连接。这样很利于它进行范围查询,很适合mysql 的场景。而B树呢,它是每个叶子节点都存了数据、并且树的高度是很高的,而树的高度高,就意味着每次都要进行一次磁盘的io,会有很高的性能损失。而Hash 虽然它的速度是O(1),但它更适合找指定的元素,而不适合范围查询
什么是聚簇索引和非聚簇索引?InnoDB 中主键索引和二级索引的区别?
联合索引的最左前缀原则是什么?哪些情况会导致索引失效?
什么是覆盖索引?它为什么能提升查询性能?
Explain 中的 type、key、rows、Extra 分别代表什么?
三、事务 & 并发(必问)
什么是事务?事务的四大特性(ACID)分别是如何实现的?
MySQL 有哪些事务隔离级别?分别会产生哪些并发问题?
什么是脏读、不可重复读、幻读?MySQL 是如何解决幻读的?
InnoDB 是如何实现 MVCC 的?Read View 里包含哪些关键字段?
四、锁机制(偏原理,拉开差距)
MySQL 中有哪些锁?表锁和行锁的区别是什么?
什么是意向锁?它的作用是什么?
什么是间隙锁(Gap Lock)和临键锁(Next-Key Lock)?它们解决了什么问题?
五、日志 & 架构(高级但高频)
MySQL 中 redo log、undo log、binlog 的作用和区别是什么?
MySQL 是如何保证崩溃恢复(Crash Safe)的?
InnoDB 和 MyISAM 的核心区别有哪些?为什么生产环境基本都用 InnoDB?