好的,关于MySQL的常见面试题范围非常广,从基础的SQL语法到深层的原理和优化都有涉及。我为你整理了一个从浅入深、分类清晰的常见面试题清单,并附上一些考察点说明。
三大范式是什么?
CHAR
和 VARCHAR
的区别是什么?
CHAR
是定长,浪费空间但效率高;VARCHAR
是变长,节省空间但效率稍低。DATETIME
和 TIMESTAMP
的区别?
DROP
、DELETE
与 TRUNCATE
的区别?
DELETE
是DML,逐行删除,可回滚;TRUNCATE
是DDL,销毁表数据页,不可回滚;DROP
是删除整个表。INNER JOIN
、LEFT JOIN
、RIGHT JOIN
、FULL JOIN
的区别?
什么是联合索引?它的原理是什么?最左前缀原则是什么?
(a,b,c)
索引能用于查询a=?
、a=? and b=?
,但不能用于b=? and c=?
。为什么使用索引?索引的优缺点是什么?
索引底层使用了什么数据结构?为什么用B+Tree而不是Hash或B-Tree?
什么是聚簇索引( clustered index )和非聚簇索引( secondary index )?
什么是回表查询?如何避免?
什么是覆盖索引?它的优点是什么?
如何创建索引?有哪些原则?
WHERE
、ORDER BY
、GROUP BY
的字段;区分度高的字段;联合索引的字段顺序等。什么是数据库事务?它的ACID特性是什么?
事务的隔离级别有哪些?MySQL的默认级别是什么?
READ UNCOMMITTED
, READ COMMITTED
, REPEATABLE READ
(MySQL默认), SERIALIZABLE
。以及每个级别能解决哪些并发问题(脏读、不可重复读、幻读)。什么是MVCC?它是如何工作的?
ReadView
、undo log、版本链等概念。MySQL有哪些锁?
什么是间隙锁(Gap Lock)和Next-Key Lock?
REPEATABLE READ
级别下解决幻读问题的机制。MyISAM 和 InnoDB 的区别是什么?
InnoDB引擎的四大特性是什么?
如何定位和分析慢查询?
EXPLAIN
分析SQL,使用show processlist
查看实时线程。EXPLAIN命令结果中的关键字段有哪些?其含义是什么?
什么情况下索引会失效?
!=
或<>
、LIKE
以通配符%
开头、OR条件前后未全部使用索引等。数据库如何做优化?
innodb_buffer_pool_size
等参数。什么是数据库的死锁?如何解决?
简述MySQL主从复制(Replication)的原理?
什么是读写分离?如何实现?
什么是分库分表?为什么要分库分表?
面试建议:
* 不要死记硬背,理解背后的原理和“为什么”更重要。
* 结合自己的项目经验,准备一两个你如何优化SQL、处理过数据库问题的实际案例。
* 对于高级问题,即使没在生产中用过,也要表明你了解其概念和适用场景。
这个清单几乎覆盖了从初级到高级的MySQL核心面试考点,熟练掌握它们将对你的面试大有裨益。