MySQL作为当前最流行的关系型数据库之一,是众多企业后端系统的核心存储组件,DBA岗位面试中对MySQL基础知识的考察占比极高,掌握核心考点能有效提升求职竞争力。

一、数据库基础概念类题目
1. 请说明关系型数据库和非关系型数据库的核心区别
关系型数据库基于关系模型设计,数据存储在二维表中,表与表之间通过外键建立关联,支持ACID事务特性,适合存储结构化数据,典型代表有MySQL、PostgreSQL。非关系型数据库不依赖表结构,存储格式灵活,包括键值对、文档、列存储等多种类型,扩展性更强,适合处理非结构化或半结构化数据,典型代表有Redis、MongoDB。
2. MySQL的存储引擎InnoDB和MyISAM有什么差异
两者核心差异如下:
| 对比维度 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 支持ACID事务,支持提交、回滚、崩溃恢复 | 不支持事务 |
| 锁机制 | 支持行级锁,并发性能更好 | 仅支持表级锁,高并发下性能较差 |
| 外键支持 | 支持外键约束 | 不支持外键 |
| 索引类型 | 聚簇索引,主键索引叶子节点存储整行数据 | 非聚簇索引,索引叶子节点存储数据行地址 |
| 适用场景 | 写操作多、需要事务保障的业务场景 | 读操作多、不需要事务的静态数据存储场景 |
二、SQL语句与查询类题目
3. 如何查询表中重复的记录
可以通过分组统计的方式筛选重复数据,示例代码如下:
-- 查询user表中username重复的所有记录
SELECT *
FROM user
WHERE username IN (
SELECT username
FROM user
GROUP BY username
HAVING COUNT(*) > 1
);4. 说一下左连接、右连接、内连接的区别
内连接(INNER JOIN)只返回两个表中匹配关联条件的记录;左连接(LEFT JOIN)返回左表所有记录,右表没有匹配则对应字段显示为NULL;右连接(RIGHT JOIN)返回右表所有记录,左表没有匹配则对应字段显示为NULL。
5. 如何优化慢查询SQL
优化步骤通常包括:先通过慢查询日志定位执行时间过长的SQL语句,使用EXPLAIN命令分析执行计划,查看是否使用了索引、扫描行数是否过多,再根据分析结果调整索引、改写SQL逻辑,避免全表扫描。
三、索引与性能优化类题目
6. 索引的工作原理是什么,为什么能提升查询速度
索引本质是排好序的数据结构,MySQL中InnoDB默认使用B+树作为索引结构。B+树的非叶子节点只存储索引键和子节点指针,叶子节点存储索引键和对应数据地址(或聚簇索引下的整行数据),且叶子节点之间通过双向链表连接。查询时不需要全表扫描,只需要从根节点向下匹配,快速定位到目标数据,时间复杂度从全表扫描的O(n)降低到O(log n)。
7. 什么情况下索引会失效
常见索引失效场景包括:对索引字段使用函数或运算、查询条件中使用不等于(!=、<>)、like查询以通配符开头(如LIKE '%test')、查询条件中字段类型不匹配发生隐式转换、使用OR连接条件且部分字段没有索引、联合索引没有遵循最左前缀原则。
8. 联合索引的最左前缀原则是什么
联合索引是按照索引字段的创建顺序排序的,查询时只有条件中包含联合索引最左侧的字段,索引才会生效。例如创建联合索引idx_a_b_c(a,b,c),那么查询条件包含a、包含a和b、包含a和b和c时都会使用索引,只包含b或者只包含c则不会触发索引。
四、事务与锁机制类题目
9. 请解释ACID四个特性的含义
原子性(Atomicity)指事务中的所有操作要么全部完成,要么全部回滚,不会只执行部分操作;一致性(Consistency)指事务执行前后数据库的状态符合所有约束规则,数据保持逻辑上的正确性;隔离性(Isolation)指多个事务并发执行时,一个事务的执行不会被其他事务干扰;持久性(Durability)指事务提交后,对数据的修改会永久保存到数据库中,即使系统故障也不会丢失。
10. MySQL的事务隔离级别有哪些,分别能解决什么问题
MySQL支持四种事务隔离级别:读未提交(READ UNCOMMITTED)最低,会出现脏读、不可重复读、幻读问题;读已提交(READ COMMITTED)能解决脏读问题,仍会出现不可重复读和幻读;可重复读(REPEATABLE READ)是MySQL默认隔离级别,能解决脏读和不可重复读问题,InnoDB引擎通过间隙锁可以解决幻读;串行化(SERIALIZABLE)最高,所有事务串行执行,能解决所有并发问题,但性能最低。
11. InnoDB的锁类型有哪些
按照锁的粒度分为:共享锁(S锁,读锁,多个事务可以同时持有,用于读取数据)、排他锁(X锁,写锁,只有一个事务可以持有,用于修改数据)、意向锁(包括意向共享锁IS、意向排他锁IX,用于快速判断表中是否有行被加锁,提升锁冲突判断效率)、间隙锁(锁定索引记录之间的间隙,防止其他事务插入数据,解决幻读问题)、临键锁(行锁+间隙锁的组合,InnoDB默认的行锁算法)。
五、运维与进阶类题目
12. MySQL主从复制的原理是什么
主从复制分为三个步骤:主库把数据变更记录到二进制日志(binlog)中;从库的IO线程连接主库,读取主库的binlog事件并写入到自己的中继日志(relay log)中;从库的SQL线程读取中继日志中的事件,在从库上重放执行,完成数据同步。
13. 如何备份和恢复MySQL数据库
常用的备份方式包括逻辑备份和物理备份。逻辑备份可以使用mysqldump工具,示例备份命令如下:
-- 备份test数据库到test_backup.sql文件 mysqldump -u root -p test > test_backup.sql
恢复时可以使用mysql命令导入备份文件:
-- 将备份文件导入到test数据库 mysql -u root -p test < test_backup.sql
14. 什么是MVCC,它的作用是什么
MVCC是多版本并发控制机制,InnoDB通过它实现非锁定读,提升并发性能。核心逻辑是为每行数据保存多个历史版本,事务读取数据时根据版本号判断,只读取自己事务开始前已经提交的数据版本,不需要加锁就可以避免读到其他事务未提交的数据,解决了读写冲突问题。
15. 如何监控MySQL的运行状态
可以通过多种途径监控:使用SHOW STATUS命令查看数据库运行指标,比如连接数、查询次数、慢查询数量;使用SHOW PROCESSLIST查看当前正在执行的线程状态;开启慢查询日志统计执行时间过长的SQL;也可以通过Prometheus+Grafana等监控工具对接MySQL的监控指标,实现可视化监控和告警。