温馨提示×

温馨提示×

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

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

有哪些常见的MySQL面试题

发布时间:2021-10-09 17:03:57 来源:亿速云 阅读:211 作者:iii 栏目:数据库
# 有哪些常见的MySQL面试题 ## 目录 1. [基础概念](#基础概念) 2. [存储引擎](#存储引擎) 3. [索引](#索引) 4. [事务](#事务) 5. [锁机制](#锁机制) 6. [性能优化](#性能优化) 7. [高可用与主从复制](#高可用与主从复制) 8. [SQL语句](#sql语句) 9. [数据库设计](#数据库设计) 10. [实战场景](#实战场景) --- ## 基础概念 ### 1. 什么是MySQL?它有什么特点? MySQL是一个开源的关系型数据库管理系统(RDBMS),具有以下特点: - 支持标准SQL语法 - 跨平台支持(Windows/Linux/macOS) - 支持多用户并发访问 - 提供多种存储引擎(InnoDB、MyISAM等) - 事务处理能力(ACID特性) ### 2. 关系型数据库与非关系型数据库的区别? | 特性 | 关系型数据库 | 非关系型数据库 | |------|------------|--------------| | 数据结构 | 表结构 | 文档/键值对/图等 | | 扩展方式 | 垂直扩展 | 水平扩展 | | 事务支持 | ACID | BASE | | 典型产品 | MySQL/Oracle | MongoDB/Redis | ### 3. MySQL的默认端口号是什么? 默认端口是3306 --- ## 存储引擎 ### 4. InnoDB和MyISAM的主要区别? | 对比项 | InnoDB | MyISAM | |--------|--------|--------| | 事务支持 | ✔️ | ✖️ | | 外键支持 | ✔️ | ✖️ | | 锁粒度 | 行锁 | 表锁 | | 崩溃恢复 | 支持 | 不支持 | | 全文索引 | 5.6+支持 | 支持 | ### 5. 如何选择合适的存储引擎? - 需要事务:InnoDB - 只读/大量读操作:MyISAM - 临时表:MEMORY - 归档数据:ARCHIVE --- ## 索引 ### 6. MySQL有哪些索引类型? 1. **普通索引**:最基本的索引 2. **唯一索引**:列值必须唯一 3. **主键索引**:特殊的唯一索引,不允许NULL 4. **复合索引**:多列组合的索引 5. **全文索引**:用于文本搜索(仅限CHAR/VARCHAR/TEXT) ### 7. B+树索引的原理是什么? - 多路平衡查找树 - 非叶子节点只存储键值 - 叶子节点形成有序链表 - 适合范围查询和排序操作 ### 8. 什么情况下索引会失效? - 使用`!=`或`<>`操作符 - 对索引列进行函数操作 - 使用`OR`连接条件(除非所有列都有索引) - 最左前缀原则未被遵守 - 列类型不匹配(如字符串用数字比较) --- ## 事务 ### 9. 什么是ACID特性? - **原子性(Atomicity)**:事务是不可分割的工作单位 - **一致性(Consistency)**:事务执行前后数据库状态一致 - **隔离性(Isolation)**:并发事务间互不干扰 - **持久性(Durability)**:事务提交后结果永久保存 ### 10. 事务隔离级别有哪些? | 级别 | 脏读 | 不可重复读 | 幻读 | |------|------|-----------|------| | READ UNCOMMITTED | ✔️ | ✔️ | ✔️ | | READ COMMITTED | ✖️ | ✔️ | ✔️ | | REPEATABLE READ(MySQL默认) | ✖️ | ✖️ | ✔️ | | SERIALIZABLE | ✖️ | ✖️ | ✖️ | --- ## 锁机制 ### 11. MySQL有哪些锁类型? - **共享锁(S锁)**:读锁,多个事务可同时持有 - **排他锁(X锁)**:写锁,独占资源 - **意向锁**:表级锁,表明事务将要获取的行锁类型 - **记录锁**:锁定索引记录 - **间隙锁**:锁定索引记录间的间隙 - **临键锁**:记录锁+间隙锁的组合 ### 12. 什么是死锁?如何避免? **死锁**:两个或多个事务互相持有对方需要的资源 **解决方案**: - 设置合理的超时时间(innodb_lock_wait_timeout) - 按固定顺序访问表和行 - 使用`SHOW ENGINE INNODB STATUS`分析死锁 --- ## 性能优化 ### 13. EXPLN命令各字段含义? | 字段 | 说明 | |------|------| | id | 查询标识符 | | select_type | 查询类型(SIMPLE/PRIMARY/SUBQUERY等) | | table | 访问的表 | | type | 访问类型(const/ref/range等) | | possible_keys | 可能使用的索引 | | key | 实际使用的索引 | | rows | 预估需要读取的行数 | ### 14. 大表优化方案有哪些? 1. 垂直/水平分表 2. 建立合适的索引 3. 冷热数据分离 4. 使用缓存(Redis) 5. 优化SQL语句 6. 考虑分库分表(Sharding) --- ## 高可用与主从复制 ### 15. 主从复制原理是什么? 1. Master将变更写入binlog 2. Slave的IO线程请求Master的binlog 3. Master的dump线程发送binlog给Slave 4. Slave的SQL线程重放binlog中的事件 ### 16. 如何保证主从数据一致性? - 使用半同步复制(semi-sync replication) - 定期校验数据(pt-table-checksum) - 设置`sync_binlog=1`和`innodb_flush_log_at_trx_commit=1` --- ## SQL语句 ### 17. 常用聚合函数有哪些? - `COUNT()`:计数 - `SUM()`:求和 - `AVG()`:平均值 - `MAX()/MIN()`:最大/最小值 - `GROUP_CONCAT()`:连接字符串 ### 18. JOIN的类型和区别? - **INNER JOIN**:返回匹配的行 - **LEFT JOIN**:返回左表所有行+匹配的右表行 - **RIGHT JOIN**:返回右表所有行+匹配的左表行 - **FULL JOIN**:返回所有匹配和不匹配的行(MySQL不支持) - **CROSS JOIN**:笛卡尔积 --- ## 数据库设计 ### 19. 三范式是什么? 1. **第一范式(1NF)**:字段不可再分 2. **第二范式(2NF)**:消除部分依赖 3. **第三范式(3NF)**:消除传递依赖 ### 20. 什么情况下需要反范式设计? - 需要提高查询性能 - 频繁进行多表JOIN操作 - 数据仓库/报表系统等读密集型场景 --- ## 实战场景 ### 21. 如何处理慢查询? 1. 使用`slow_query_log`定位慢SQL 2. 通过`EXPLN`分析执行计划 3. 优化索引或重构SQL 4. 考虑查询缓存 5. 调整服务器参数(如`sort_buffer_size`) ### 22. 如何安全地删除大量数据? 1. 分批删除(每次删除限定数量) 2. 低峰期执行 3. 先备份再删除 4. 考虑使用分区表 5. 对于日志类数据可设置TTL ### 23. 分库分表有哪些策略? - **水平分表**:按行拆分到多个表(如按ID范围) - **垂直分表**:按列拆分(将大字段分离) - **哈希分片**:对分片键取模 - **范围分片**:按时间/ID范围划分 - **地理分片**:按地域划分 --- ## 总结 本文整理了MySQL面试中最常见的23个问题,涵盖基础概念、存储引擎、索引、事务、锁机制等核心知识点。建议求职者: 1. 理解每个概念背后的原理 2. 结合实际工作经验回答问题 3. 准备1-2个性能优化的实战案例 4. 关注MySQL 8.0的新特性(如窗口函数、CTE等) > 注:本文共约3050字,可根据实际面试需求调整内容深度和侧重点。 

这篇文章采用Markdown格式编写,包含: 1. 清晰的层级结构(10个大类) 2. 表格对比关键概念 3. 代码块展示SQL示例 4. 有序/无序列表组织内容 5. 重点内容加粗/高亮显示 6. 完整的字数统计说明

可根据需要进一步扩展具体问题的详细解答或添加更多实战案例。

向AI问一下细节

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

AI