首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >这些常见的mysql八股,你能答出来多少?

这些常见的mysql八股,你能答出来多少?

作者头像
Ynchen
发布2025-12-21 13:40:56
发布2025-12-21 13:40:56
460
举报
了解过ACID事务特性实现吗?
  • 原子性(Atomicity) 通过 Undo Log(回滚日志) 保证,确保事务出错时可以回滚到初始状态。
  • 一致性(Consistency) 依赖于持久性、原子性和隔离性,确保事务执行前后数据库状态符合约束规则。
  • 隔离性(Isolation) 通过 MVCC(多版本并发控制) 或锁机制保证,避免并发事务之间相互干扰。
  • 持久性(Durability) 通过 Redo Log(重做日志) 保证,确保事务提交后数据不会丢失。

MySQL事务隔离级别了解过吗?
  • 从低到高依次为: 读未提交(RU)→ 读已提交(RC)→ 可重复读(RR)→ 串行化(Serializable)
  • 默认隔离级别是 可重复读(RR)
  • 幻读问题解决
    • 可重复读通过MVCC实现快照读,避免大部分幻读;并通过间隙锁防止当前读的幻读。
    • 串行化隔离级别彻底解决幻读,采用共享锁,避免MVCC。
  • 业务选择RC而非RR的原因?: 幻读影响较小,且RC性能优于RR,适合对性能要求高且幻读可接受的场景。
  • 可重复读下MVCC实现及幻读: 事务启动时生成一个ReadView,保证事务内读到一致的快照版本; 但某些特殊情况如事务修改不可见版本或快照读结合当前读,仍可能出现少量幻读。

介绍一下MySQL各种锁的及作用
  • 设计多种锁机制,保障并发控制和数据一致性,避免脏读、不可重复读、幻读等。
  1. 全局锁 用于数据库级操作,如备份时阻止写操作,保证数据一致性,影响范围大,需谨慎使用。
  2. 表级锁
    • MyISAM仅支持表级锁,粒度大并发写性能差。
    • InnoDB支持行锁,但也有元数据锁(MDL)保证DDL和DML的互斥。
  3. 元数据锁(MDL) 保证DDL(如ALTER TABLE)与DML操作的互斥,防止结构变更冲突。
  4. 意向锁(Intention Lock) 表级锁,用于告诉上层锁管理器表中哪些行被锁,分意向共享锁(IS)和意向排它锁(IX),提高检测效率。
  5. 行级锁 InnoDB的核心锁机制,粒度最细,支持高并发,包含:
    • 记录锁(Record Lock)
    • 间隙锁(Gap Lock)
    • 临键锁(Next-Key Lock,记录锁+间隙锁组合,防幻读)

MySQL常见索引类型有哪些?
  • 普通索引(非唯一)
  • 唯一索引(保证列值唯一)
  • 主键索引(不允许NULL,InnoDB中为聚簇索引)
  • 全文索引(适合文本关键词搜索)
  • 组合索引(多列联合索引)

MySQL索引底层数据结构为何采用B+树?
  • 适合磁盘存储,节点容量大、树高度低,减少磁盘IO。
  • 非叶子节点只存索引,查询更高效。
  • 所有数据存储在叶子节点,且通过双向链表连接,支持高效范围查询和顺序扫描。
  • B+树结构稳定,插入删除对树结构影响较小。

覆盖索引(Covering Index)了解过吗?
  • 二级索引中包含查询所需的所有字段,查询时无需回表,提高效率。

最左匹配原则是什么?
  • 联合索引只能利用最左边连续的索引列。
  • 例如索引 (a,b,c),查询条件包含 aa,ba,b,c 可用索引;仅使用 b,c 无法利用该索引。

索引失效场景有哪些?(口诀:“模型数空运最快”)
  • :模糊匹配 % 在前面,如 %xx%xx%
  • :类型转换导致隐式转换,如字符串和数字比较
  • :列上使用函数或表达式
  • :索引列允许 NULL 导致失效
  • :表达式计算导致失效
  • :未遵守最左匹配原则
  • :全表扫描比走索引快

讲一下索引下推(Index Condition Pushdown,ICP)
  • 联合索引查询时,将部分过滤条件从服务层提前下推到存储引擎层。
  • 存储引擎在回表前或回表时过滤不满足条件的记录,减少回表次数和数据传输,提升查询性能。
  • ICP不能完全避免回表,但能优化回表后的过滤过程。

EXPLAIN关键字用过吗?
  • 查看SQL执行计划,帮助分析访问路径、索引使用、扫描行数和连接顺序等。

常用字段:

  • id:查询序号
  • select_type:查询类型
  • table:访问表
  • type:访问类型,优先级 consteq_ref,避免 ALL(全表扫描)
  • possible_keys:可能使用的索引
  • key:实际使用的索引
  • key_len:使用索引长度
  • ref:列或常量用于查找索引
  • rows:估算扫描行数
  • Extra:额外信息,如覆盖索引(Using index)、索引下推(Using index condition)、临时表(Using temporary)

慢查询日志是什么?
  • 记录执行时间超过阈值的慢SQL,帮助发现性能瓶颈。
  • 通过分析慢查询日志定位慢SQL后,配合 EXPLAIN 查看执行计划,定位问题根源,指导优化。

MySQL三大日志了解多少?
服务器层面三大日志
  1. 错误日志(Error Log):记录MySQL启动、关闭和运行时错误。
  2. 慢查询日志(Slow Query Log):记录慢SQL。
  3. 二进制日志(Binary Log,binlog):记录所有数据变更,用于复制和恢复。
InnoDB存储引擎三大日志
  1. 重做日志(Redo Log):保证事务持久性,用于崩溃恢复。
  2. 回滚日志(Undo Log):支持事务回滚和MVCC。
  3. 二进制日志(Binary Log):记录最终数据变更,用于复制和恢复。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 了解过ACID事务特性实现吗?
  • MySQL事务隔离级别了解过吗?
  • 介绍一下MySQL各种锁的及作用
  • MySQL常见索引类型有哪些?
  • MySQL索引底层数据结构为何采用B+树?
  • 覆盖索引(Covering Index)了解过吗?
  • 最左匹配原则是什么?
  • 索引失效场景有哪些?(口诀:“模型数空运最快”)
  • 讲一下索引下推(Index Condition Pushdown,ICP)
  • EXPLAIN关键字用过吗?
  • 慢查询日志是什么?
  • MySQL三大日志了解多少?
    • 服务器层面三大日志
    • InnoDB存储引擎三大日志
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档