news 2026/5/3 20:51:58

MySQL必备基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL必备基础

MySQL 必备基础(2025-2026 生产视角最实用版本)

以下内容把绝大多数公司在面试、接手项目、日常维护中最常遇到的 MySQL 核心知识点浓缩成一份“速查 + 理解 + 避坑”清单,适合快速建立完整认知框架。

一、MySQL 架构与存储引擎(必须记住的几张图)

  1. 最经典的逻辑架构图(三层)
客户端连接层 ←→ 服务层(SQL Interface → Parser → Optimizer → Executor) ↓ 存储引擎层(InnoDB / MyISAM / Memory / Archive …) ↓ 文件系统 + 日志(redo log、binlog、undo log、doublewrite buffer …)
  1. 最常被问的存储引擎对比表(2025-2026 真实生产分布)
特性InnoDB(默认,95%+场景)MyISAMMemory现在还在用吗?
事务支持支持(ACID)不支持不支持
行级锁支持表级锁表级锁
外键支持不支持不支持
崩溃恢复支持(redo log + undo log)不支持(容易丢数据)重启丢失
全文索引支持(5.6+,5.7+较好,8.0+很强)支持(较老版本较好)不支持视情况
聚簇索引是(主键就是聚簇索引)否(非聚簇)
压缩表支持(ROW_FORMAT=COMPRESSED)支持不支持偶尔
适合场景绝大多数 OLTP 系统只读历史表、日志表临时表、小表极致速度极少

结论一句话
除非你有非常明确的理由,否则一律用 InnoDB

二、MySQL 必须记住的 12 个核心概念(按重要性排序)

  1. InnoDB 聚簇索引 vs 非聚簇索引
    主键 = 聚簇索引,叶子节点存整行数据
    普通索引(二级索引)叶子节点存主键值 → 回表

  2. 索引的本质
    索引 = 有序数据结构(B+树为主) + 快速查找

  3. B+树 vs B树(面试最爱问)

    项目B+树(InnoDB主流)B树
    叶子节点只存数据 + 顺序链表存所有节点数据
    非叶子节点只存键,不存数据存键 + 数据
    范围查询效率极高(顺序链表)较差
    扇出(fanout)更高(节点更小)较低
  4. InnoDB 三大日志

    日志作用位置刷盘策略崩溃恢复靠它吗?
    redo log物理日志,记录“改了什么”ib_logfile0/1顺序写,持久化靠它
    undo log逻辑日志,回滚 + MVCC回滚段(表空间内)辅助
    binlog逻辑日志,用于主从复制binlog 文件提交时刷盘(sync_binlog)否(复制用)
  5. redo log 与 binlog 的两阶段提交

    prepare → write binlog → commit → write redo log commit

    保证主从一致性和崩溃恢复的一致性。

  6. MVCC(多版本并发控制)核心字段

    • DB_TRX_ID(创建版本)
    • DB_ROLL_PTR(回滚指针)
    • DB_ROW_ID(行ID,非必须)
    • ReadView(读视图)决定可见版本
  7. 四种隔离级别 + 三个并发问题

    隔离级别脏读不可重复读幻读MySQL 默认
    READ UNCOMMITTED很少用
    READ COMMITTEDOracle 默认
    REPEATABLE READ有*MySQL 默认
    SERIALIZABLE性能最差

    *MySQL RR 通过间隙锁 + Next-Key Lock 大部分场景解决幻读

  8. 间隙锁(Gap Lock)、Next-Key Lock、Record Lock

    • Record Lock:锁住单行记录
    • Gap Lock:锁住索引记录之间的“间隙”
    • Next-Key Lock = Record Lock + Gap Lock(RR 默认)
  9. InnoDB 行格式(Row Format)对比

    格式变长字段长度列表NULL 位图记录头信息列数据行溢出页指针压缩主流程度
    Compact曾经主流
    Redundant很老
    Dynamic有(优化)现代推荐
    Compressed有(压缩)大表常用

    现在建表默认 Dynamic,建议显式写 ROW_FORMAT=DYNAMIC

  10. change buffer、doublewrite buffer、自适应哈希索引

    • change buffer:延迟写二级索引(insert buffer + delete buffer + purge buffer)
    • doublewrite buffer:防止部分页写入(系统表空间的连续 128 个页)
    • 自适应哈希索引(AHI):InnoDB 自己根据访问模式建立的内存哈希索引(可关闭)
  11. InnoDB 锁类型速查表

    锁类型加锁方式场景是否阻塞其他事务
    共享锁(S)SELECT … LOCK IN SHARE MODE读锁,允许其他读,不允许写写阻塞
    排他锁(X)SELECT … FOR UPDATE / DML写锁,别人不能读也不能写全阻塞
    意向锁自动加(IS/IX)表级意向,快速判断表是否有行锁不阻塞
    记录锁精准命中索引where id = 5
    间隙锁范围查询非唯一索引where id > 5 and id < 10防幻读
    Next-Key Lock范围 + 记录RR 隔离级别默认
  12. 慢查询日志 & 执行计划必看字段

    • type:system > const > eq_ref > ref > range > index > ALL(越靠前越好)
    • key:实际使用的索引
    • rows:扫描行数(估算)
    • Extra:Using index / Using where / Using temporary / Using filesort(后两者要警惕)

三、MySQL 基础最常考的 20 个问题(建议默写答案)

  1. InnoDB 和 MyISAM 最大的区别是什么?
  2. 什么是聚簇索引?为什么建议用自增主键?
  3. 为什么不推荐 UUID 做主键?
  4. redo log、undo log、binlog 分别是什么?谁负责什么?
  5. 什么是两阶段提交?为什么需要它?
  6. MVCC 的 ReadView 什么时候生成?RR 和 RC 区别在哪?
  7. 什么是幻读?MySQL RR 是怎么解决幻读的?
  8. Next-Key Lock 具体锁住什么范围?
  9. change buffer 什么时候合并?什么时候不使用?
  10. doublewrite buffer 解决了什么问题?
  11. 什么是回表?怎么尽量避免回表?
  12. 索引下推(ICP)是什么?什么时候生效?
  13. 什么是前缀索引?什么时候用?
  14. 为什么 LIKE ‘abc%’ 可以走索引,而 ‘%abc’ 不行?
  15. 联合索引的“最左前缀原则”是什么?
  16. 什么时候索引会失效?
  17. explain 中 Using filesort 和 Using temporary 分别代表什么?
  18. InnoDB 怎么实现自增主键不重复?
  19. MySQL 8.0 相对于 5.7 最重大的几个变化是什么?
  20. 你线上遇到过最严重的慢查询/死锁是怎么解决的?

这份清单基本覆盖了 90% 的 MySQL 基础面试 + 生产问题。

如果你想针对其中任意一点展开成“超详细版”(比如 MVCC 详细推演、间隙锁范围图解、change buffer 合并时机等),直接告诉我具体序号或关键词即可。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:48:02

Nodejs+vueapp音乐推荐系统付费免费原型的设计小程序

文章目录系统概述核心功能设计技术实现要点数据库设计原型设计工具注意事项--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 Node.jsVue.js 音乐推荐系统小程序结合付费与免费模式&#xff0c;通过个性化推…

作者头像 李华
网站建设 2026/5/1 6:54:21

Nodejs+vue安卓的驾校练车考试预约管理系统小程序

文章目录系统概述核心功能模块技术架构特色与优化应用价值--nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 该系统基于Node.js后端和Vue.js前端开发&#xff0c;结合移动端技术&#xff08;如Uniapp或微信…

作者头像 李华
网站建设 2026/5/1 1:58:56

SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;的庖丁解牛

SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10; 是 高性能分页查询的典范&#xff0c;它通过 游标分页&#xff08;Cursor-based Pagination&#xff09; 避免了传统 OFFSET 的性能陷阱。一、执行机制&#xff1a;为什么高效&#xff1f; ▶ 1. 执行计划解…

作者头像 李华
网站建设 2026/5/2 13:12:51

利用Fleet驾驭多集群Elastic部署:统一管理与数据本地化

提升全球运营&#xff1a;利用Fleet驾驭多集群Elastic部署 在当今的全球性企业中&#xff0c;分布式基础设施已成为常态而非例外。组织跨越各大洲运营&#xff0c;并受到客户邻近性和法规要求的驱动。对于Elastic Stack而言&#xff0c;这种现实通常转化为多集群部署模式&…

作者头像 李华
网站建设 2026/5/3 11:04:47

MariaDB 备份与恢复完整指南

文章目录 MariaDB 备份与恢复完整指南 一、环境准备与测试数据创建 1. 检查 MariaDB 状态 2. 创建测试数据库和数据 二、使用 mysqldump 进行逻辑备份 1. 基本备份命令 2. 高级备份选项 3. 自动备份脚本 三、使用 mariadb-backup 进行物理备份 1. 安装 mariadb-backup 2. 完整备…

作者头像 李华