本文共 1819 字,大约阅读时间需要 6 分钟。
MySQL 面试题汇总
金三银四到了,给大家整理一些数据库必知必会的面试题。这些问题涵盖了基础、索引、日志、数据恢复、主从备份等多个方面,适合正在准备数据库相关工作面试的同学。
基础相关
关系型和非关系型数据库的区别?
关系型数据库的优点:
- 易于理解,采用关系模型组织数据。
- 数据一致性高,更新开销小,支持复杂查询。
非关系型数据库(NOSQL)的优点:
- 无需 SQL 层解析,读写效率高。
- 支持多种数据类型存储,如图片、文档等。
- 扩展性强,适合高并发场景。
MySQL 语句执行的步骤?
- 客户端请求 → 连接器验证用户权限 → 查询缓存 → 分析器解析 SQL → 优化器选择执行方案 → 执行器执行 SQL → 引擎返回结果。
MySQL 使用索引的原因?
- 根本原因:类似书的目录,提高查询效率。
- 扩展:创建唯一性索引,避免排序和临时表,减少随机 IO。
索引的三种常见底层数据结构?
- 哈希表:适用于等值查询,范围查询不佳。
- 有序数组:静态存储,范围查询性能好,但更新成本高。
- N 叉树:性能优点好,适合数据库引擎,支持范围查询。
MySQL 的索引类型及其作用?
- 主键索引(聚簇索引):叶子节点存整行数据。
- 非主键索引(二级索引):叶子节点存主键值。
MyISAM 和 InnoDB 实现 B 树索引的区别?
- InnoDB:叶子节点存数据,本身是索引文件。
- MyISAM:叶子节点存数据地址,索引文件与数据文件分离。
InnoDB 为什么设计 B+ 树索引?
- 考虑因素:优化查询性能,减少随机 IO。
- 选择 B+ 树:避免哈希索引的范围查询问题,树结构减少随机 IO。
覆盖索引和索引下推?
- 覆盖索引:减少搜索次数,提升查询性能。
- 索引下推:MySQL 5.6 引入的优化,减少回表次数。
哪些操作会导致索引失效?
字符串加索引的优化方法?
- 创建完整索引(空间占用大)、前缀索引(查询效率低)、倒序存储索引、创建 hash 索引。
日志相关
MySQL 的 change buffer 是什么?
MySQL 如何判断一行扫描数?
MySQL 的 redo log 和 binlog 区别?
- redo log:循环写日志,crash 后恢复数据。
- binlog:追加写日志,用于主从复制。
为什么需要 redo log?
redo log 的写入方式?
- 内存日志缓冲 → 写入磁盘 → 参数配置(延迟写、实时写)。
redo log 的执行流程?
- 更新数据 → 记录 redo log → 事务提交 → 写入磁盘。
binlog 的概念和作用?
- 归档日志,实现主从复制和数据恢复,但非 crash-safe。
两阶段提交的作用?
- 确保 redo log 和 binlog 一致性,防止数据丢失。
MySQL 如何恢复未刷盘的数据?
- 根据 redo log 和 binlog 的状态进行恢复。
WAL 技术的优点?
主从备份相关
MySQL 主备同步的流程?
- 建立长链接、配置备库、启动复制线程、解析 binlog。
主备延迟的原因及解决方案?
多线程复制策略的意义?
MySQL 的并发链接和并发查询?
- 并发连接:线程数影响内存使用。
- 并发查询:CPU 核数限制,设置 innodb_thread_concurrency。
如何快速恢复误删数据?
- 使用备份和 binlog 恢复,重点配置 binlog_row_image=full。
其他
MySQL 数据恢复工具的选择?
- mysqldump、xtrabackup、FLUSH LOGS。
如何处理大表查询不爆内存?
临时表的用法和特性?
存储引擎介绍(InnoDB、MyISAM、MEMORY)?
- InnoDB:事务安全,默认存储引擎。
- MyISAM:插入查询速度快,无事务。
- MEMORY:内存存储,查询速度快。
内存表的优缺点?
- 优点:快速访问;缺点:锁粒度问题,数据持久化问题。
如需进一步了解或补充内容,可以随时联系!
转载地址:http://dbbfk.baihongyu.com/