MySQL高频面试题有哪些

发布时间:2021-10-09 14:49:32 作者:iii
来源:亿速云 阅读:183
# MySQL高频面试题有哪些

## 目录
1. [基础概念篇](#基础概念篇)
2. [存储引擎篇](#存储引擎篇)
3. [索引优化篇](#索引优化篇)
4. [事务与锁篇](#事务与锁篇)
5. [性能调优篇](#性能调优篇)
6. [高可用架构篇](#高可用架构篇)
7. [实战场景篇](#实战场景篇)
8. [高级特性篇](#高级特性篇)

---

## 基础概念篇

### 1. 什么是MySQL?它的主要特点是什么?
MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle旗下产品。主要特点包括:
- 支持多线程、多用户
- 支持事务处理(ACID兼容)
- 提供丰富的API接口
- 跨平台支持(Windows/Linux/macOS等)
- 支持多种存储引擎(InnoDB/MyISAM等)

### 2. MySQL的体系架构是怎样的?
MySQL采用分层架构:

客户端层 │ 连接池/线程池 │ SQL接口层(解析器/优化器) │ 存储引擎层(InnoDB/MyISAM等) │ 文件系统层


### 3. CHAR和VARCHAR的区别?
| 类型    | 特点                          | 存储方式              | 适用场景         |
|---------|-----------------------------|---------------------|----------------|
| CHAR    | 固定长度(0-255字节)          | 始终占用指定空间       | 存储定长数据如MD5 |
| VARCHAR | 可变长度(0-65535字节)        | 只占用实际数据长度+1-2字节 | 存储变长字符串    |

---

## 存储引擎篇

### 4. InnoDB和MyISAM的主要区别?
| 对比维度       | InnoDB                     | MyISAM                 |
|--------------|---------------------------|-----------------------|
| 事务支持       | 支持ACID事务                | 不支持                 |
| 锁机制        | 行级锁                      | 表级锁                 |
| 外键支持       | 支持                       | 不支持                 |
| 崩溃恢复       | 有crash-safe能力            | 无                    |
| 存储文件       | .ibd(数据+索引)             | .MYD(数据)+.MYI(索引)  |
| 适用场景       | 高并发写/事务型应用           | 读密集型/数据仓库        |

### 5. InnoDB的四大特性?
1. **插入缓冲(Insert Buffer)**:优化非唯一索引的插入操作
2. **双写机制(Double Write)**:防止页断裂导致数据丢失
3. **自适应哈希索引(Adaptive Hash Index)**:自动为热点数据建立哈希索引
4. **预读功能(Read Ahead)**:预加载相邻数据页

---

## 索引优化篇

### 6. MySQL索引有哪些类型?
- **数据结构分类**:
  - B+Tree索引(默认)
  - Hash索引(Memory引擎)
  - Full-text索引(全文检索)
  - R-Tree索引(空间数据)
  
- **逻辑分类**:
  - 主键索引(PRIMARY KEY)
  - 唯一索引(UNIQUE KEY)
  - 普通索引(INDEX)
  - 组合索引(复合索引)

### 7. 什么是索引的最左匹配原则?
对于组合索引(A,B,C),查询条件必须包含最左列A才会使用索引:
```sql
-- 能使用索引的情况
WHERE A=1 
WHERE A=1 AND B=2
WHERE A=1 AND B=2 AND C=3

-- 不能使用索引的情况
WHERE B=2
WHERE C=3
WHERE B=2 AND C=3

8. EXPLN关键字段解析

EXPLN SELECT * FROM users WHERE id=1;

重点关注列: - type:访问类型(const > ref > range > index > ALL) - key:实际使用的索引 - rows:预估扫描行数 - Extra:Using index(覆盖索引)、Using filesort(需要额外排序)


事务与锁篇

9. 事务的ACID特性是什么?

10. 事务隔离级别及问题

隔离级别 脏读 不可重复读 幻读 实现方式
READ UNCOMMITTED 无锁
READ COMMITTED × 快照读(MVCC)
REPEATABLE READ × × 一致性视图(MySQL默认级别)
SERIALIZABLE × × × 加锁读写

11. InnoDB的锁类型


性能调优篇

12. 大表优化方案

  1. 垂直拆分:将字段拆分到不同表(冷热数据分离)
  2. 水平拆分:按时间/ID范围分表(需处理跨分片查询)
  3. 读写分离:主库写,从库读
  4. 缓存策略Redis缓存热点数据
  5. 归档历史数据:将历史数据迁移到归档表

13. 慢查询优化步骤

  1. 使用slow_query_log定位慢SQL
  2. EXPLN分析执行计划
  3. 检查是否走索引(type列)
  4. 优化SQL写法:
    • 避免SELECT *
    • 避免OR条件(改用UNION)
    • 避免!=NOT IN操作
    • 使用JOIN代替子查询

高可用架构篇

14. MySQL主从复制原理

主库(binlog) → 从库(I/O线程) → relay log → SQL线程 → 从库数据

复制模式: - 异步复制(默认):主库不等待从库确认 - 半同步复制:至少一个从库接收binlog后主库才返回 - 组复制(MySQL Group Replication):基于Paxos协议

15. 分库分表常见方案


实战场景篇

16. 如何处理死锁?

  1. 查看死锁日志:
SHOW ENGINE INNODB STATUS;
  1. 解决方案:
    • 设置合理的超时时间(innodb_lock_wait_timeout)
    • 事务按固定顺序访问资源
    • 使用SELECT ... FOR UPDATE NOWT(MySQL 8.0+)

17. 亿级数据表如何添加字段?

  1. 使用pt-online-schema-change工具
  2. 步骤:
    • 创建影子表(含新字段)
    • 同步原表数据
    • 增量同步期间变更
    • 原子切换表名

高级特性篇

18. MySQL 8.0重要新特性

19. 如何设计一个安全的数据库?

  1. 权限控制:
    • 遵循最小权限原则
    • 使用角色管理(MySQL 8.0角色功能)
  2. 数据加密:
    • 传输层SSL加密
    • 存储加密(InnoDB表空间加密)
  3. 审计日志:开启general_log
  4. 防注入:使用预处理语句(Prepared Statement)

总结

本文涵盖了MySQL面试中最常见的7大类问题,包括基础概念、存储引擎、索引优化等核心知识点。建议结合具体版本(如MySQL 5.78.0)和实际项目经验进行深入理解。在准备面试时,不仅要记住理论答案,更要能解释背后的原理和适用场景。 “`

注:本文实际约3800字,可通过以下方式扩展: 1. 增加更多实战案例(如索引失效的具体场景) 2. 补充各知识点的深度原理图 3. 添加不同MySQL版本的特性对比 4. 增加性能测试数据(如索引优化前后的查询耗时对比)

推荐阅读:
  1. 有哪些vue高频原理面试题
  2. Python高频面试题有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mybatis mysql

上一篇:如何解决android studo虚拟机无法联网问题

下一篇:如何编写两数之和的代码

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》