📖 本篇简介:本篇把 MySQL 面试中最常被追问的 100 个专业名词按"索引 / 事务锁 / 架构存储 / SQL优化 / 高可用运维"五大类整理成速查表,每条一句话解释。面试中被问到某个名词时,你能用一句话说清它是什么、解决什么问题,就算过关。本文基于 MySQL 8.0。
目录
- 1 使用说明
- 2 索引相关名词1至20
- 3 事务与锁相关名词21至40
- 4 架构与存储相关名词41至60
- 5 SQL与优化相关名词61至80
- 6 高可用与运维相关名词81至100
- 7 名词记忆法
- 8 名词易混对比表
- 9 面试中怎么用名词
- 10 自测练习
1 使用说明
名词解释题是面试的"送分题",也是"送命题"——说个大概面试官觉得你懂,说错了就露馅。本篇要求:看到名词,能在 10 秒内说出"它是什么 + 解决什么问题"。
100 条名词按主题分成五组,每组 20 条。建议按组复习:先遮住"解释"列,看着名词自己说;说不出来的做个标记,第二天再复习。下面给出每类名词的学习重点。
| 类别 | 条目范围 | 学习重点 |
|---|---|---|
| 索引相关 | 1~20 | B+树、聚簇、覆盖、最左前缀 |
| 事务锁 | 21~40 | ACID、隔离级别、MVCC、间隙锁 |
| 架构存储 | 41~60 | Buffer Pool、redo、binlog、页 |
| SQL优化 | 61~80 | EXPLAIN、回表、慢查询、filesort |
| 高可用运维 | 81~100 | 主从、GTID、分库分表、备份 |
2 索引相关名词1至20
| 编号 | 名词 | 一句话解释 |
|---|---|---|
| 1 | B+树 | InnoDB 默认索引结构,多路平衡查找树,叶子节点存数据或主键 |
| 2 | 聚簇索引 | 叶子节点直接存整行数据,一张表只有一个,通常是主键 |
| 3 | 二级索引 | 叶子节点存主键值,查到后需回表 |
| 4 | 回表 | 通过二级索引拿到主键,再去聚簇索引查整行 |
| 5 | 覆盖索引 | 索引包含查询所需全部列,无需回表 |
| 6 | 联合索引 | 多个列组成的索引,按列顺序生效 |
| 7 | 最左前缀 | 联合索引必须从最左列开始用,否则失效 |
| 8 | 索引下推 | 5.6+ 把索引条件下推到存储引擎层过滤,减少回表 |
| 9 | 主键索引 | 主键上的聚簇索引,InnoDB 必有 |
| 10 | 唯一索引 | 列值唯一的索引,允许一个 NULL |
| 11 | 普通索引 | 没有唯一约束的二级索引 |
| 12 | 前缀索引 | 对字符串前 N 个字符建索引,省空间 |
| 13 | 全文索引 | 对文本内容做倒排索引,用于全文检索 |
| 14 | 索引选择性 | 不重复值占比,越高索引越有效 |
| 15 | 基数 | 索引列不重复值的个数,影响优化器选择 |
| 16 | 索引失效 | 因写法导致索引不被使用,退化为全表扫 |
| 17 | 函数索引 | 8.0 支持对列的函数结果建索引 |
| 18 | descending index | 8.0 支持降序索引 |
| 19 | 自适应哈希索引 | InnoDB 自动对热点页建哈希,加速等值查询 |
| 20 | 索引分裂 | B+树页满时分裂,写入时有代价 |
3 事务与锁相关名词21至40
| 编号 | 名词 | 一句话解释 |
|---|---|---|
| 21 | 事务 | 一组要么全成功要么全失败的 SQL 单元 |
| 22 | ACID | 原子性、一致性、隔离性、持久性四大特性 |
| 23 | 原子性 | 事务内操作要么全做要么全不做 |
| 24 | 一致性 | 事务前后数据库约束不被破坏 |
| 25 | 隔离性 | 并发事务之间互不干扰 |
| 26 | 持久性 | 提交后数据永久不丢 |
| 27 | 脏读 | 读到别的事务未提交的数据 |
| 28 | 不可重复读 | 同一事务内两次读同一行结果不同 |
| 29 | 幻读 | 同一事务内两次查询行数不同 |
| 30 | 隔离级别 | 读未提交/读已提交/可重复读/串行化 |
| 31 | MVCC | 多版本并发控制,读快照不加锁 |
| 32 | undo log | 回滚日志,实现原子性与 MVCC |
| 33 | redo log | 重做日志,实现持久性 |
| 34 | 行锁 | 锁单行粒度,并发度高 |
| 35 | 间隙锁 | 锁索引记录之间的间隙,防幻读 |
| 36 | 临键锁 | 行锁+间隙锁,RR 默认锁算法 |
| 37 | 记录锁 | 精确锁一条索引记录 |
| 38 | 死锁 | 两个事务互相等对方释放锁 |
| 39 | 锁等待超时 | innodb_lock_wait_timeout,超时后报错回滚 |
| 40 | 意向锁 | 表级锁,标记表内有行锁意向 |
4 架构与存储相关名词41至60
| 编号 | 名词 | 一句话解释 |
|---|---|---|
| 41 | Buffer Pool | InnoDB 内存缓冲池,缓存数据页与索引页 |
| 42 | 数据页 | InnoDB 读写磁盘的最小单位,默认 16K |
| 43 | 表空间 | 表数据的物理容器,分共享与独立 |
| 44 | redo log | 物理日志,记录页修改,崩溃恢复用 |
| 45 | binlog | 逻辑日志,记录所有写操作,主从复制用 |
| 46 | undo log | 逻辑回滚日志,MVCC 快照来源 |
| 47 | change buffer | 对二级索引页的写操作先缓存,合并写盘 |
| 48 | doublewrite | 双写缓冲,防页部分写损坏 |
| 49 | checkpoint | 脏页刷盘点,崩溃恢复从这开始 |
| 50 | LRU 链表 | Buffer Pool 淘汰算法,分 young/old 区 |
| 51 | change buffer | 二级索引写优化 |
| 52 | 后台线程 | InnoDB 刷脏页、undo 清理等后台 worker |
| 53 | 行格式 | DYNAMIC/COMPACT/REDUNDANT,影响存储 |
| 54 | 页分裂 | 页写满时分裂,影响写入性能 |
| 55 | 表碎片 | delete/update 后磁盘不连续,需整理 |
| 56 | 自增锁 | 自增 ID 分配时的锁,8.0 默认 interleaved |
| 57 | 自适应哈希 | 自动对热点页建哈希索引 |
| 58 | 数据字典 | 8.0 把表元数据存 InnoDB,不再用 frm 文件 |
| 59 | undo 表空间 | 存 undo log 的独立表空间 |
| 60 | 临时表空间 | 磁盘临时表存放位置 |
5 SQL与优化相关名词61至80
| 编号 | 名词 | 一句话解释 |
|---|---|---|
| 61 | EXPLAIN | 查看 SQL 执行计划的命令 |
| 62 | type 列 | 访问类型,ALL 最差 const 最好 |
| 63 | key 列 | 实际用到的索引 |
| 64 | rows 列 | 预估扫描行数 |
| 65 | filtered 列 | 过滤后剩下的行比例 |
| 66 | Extra 列 | 额外信息,Using filesort/temporary 要警惕 |
| 67 | 慢查询 | 执行超过 long_query_time 的 SQL |
| 68 | 全表扫描 | 没走索引,逐行扫,type=ALL |
| 69 | filesort | 额外排序,没走索引排序 |
| 70 | temporary | 用到磁盘临时表 |
| 71 | N+1 查询 | 循环里查数据库,查 N+1 次 |
| 72 | 执行计划 | 优化器生成的 SQL 执行步骤 |
| 73 | 优化器 | 决定 SQL 怎么执行的模块 |
| 74 | 基数 | 索引列不同值个数 |
| 75 | 统计信息 | 优化器用来选索引的数据分布 |
| 76 | 直方图 | 8.0 数据分布统计,帮优化器选索引 |
| 77 | trace | 跟踪优化器决策过程 |
| 78 | join buffer | 无索引 JOIN 时的内存缓冲 |
| 79 | 慢日志 | 记录慢查询的日志 |
| 80 | 读写分离 | 写走主库读走从库 |
6 高可用与运维相关名词81至100
| 编号 | 名词 | 一句话解释 |
|---|---|---|
| 81 | 主从复制 | 主库 binlog 同步到从库重演 |
| 82 | binlog | 主库逻辑日志 |
| 83 | relay log | 从库中转日志 |
| 84 | GTID | 全局事务 ID,8.0 推荐复制方式 |
| 85 | 半同步复制 | 主库等至少一个从库确认 |
| 86 | 并行复制 | 从库多线程回放 binlog |
| 87 | 脑裂 | 主从切换时两个主同时写 |
| 88 | MHA | 主从高可用切换工具 |
| 89 | Orchestrator | 开源主从拓扑管理工具 |
| 90 | 分库分表 | 数据水平拆分到多个库表 |
| 91 | 垂直拆分 | 按业务拆库 |
| 92 | 水平拆分 | 按行拆表 |
| 93 | 分片键 | 水平拆分的路由依据 |
| 94 | 分布式事务 | 跨库事务,2PC/TCC |
| 95 | 备份 | 全量备份+增量备份 |
| 96 | binlog 恢复 | 用 binlog 做时间点恢复 |
| 97 | mysqldump | 逻辑备份工具 |
| 98 | XtraBackup | 物理热备工具 |
| 99 | 高可用 | 主从+自动切换,减少停机 |
| 100 | 读写分离 | 读请求分摊到从库 |
7 名词记忆法
死记 100 个名词很痛苦,用"记忆钩子"把它们串起来。下面这张表给每个高频名词配一个画面化记忆点。
| 名词 | 记忆钩子 |
|---|---|
| B+树 | 多层目录树,叶子链表范围查得快 |
| 聚簇索引 | 书的正文本身就是目录 |
| 二级索引 | 书末的索引页,查到页码再翻正文 |
| 回表 | 先查目录拿到页码,再翻正文 |
| 覆盖索引 | 目录里就印着全部内容,不用翻正文 |
| 最左前缀 | 联合索引像电话簿姓-名,先按姓查 |
| MVCC | 多版本账本,每个人看自己那页 |
| undo log | 草稿纸,写错了能划掉重写 |
| redo log | 施工日志,断电后照着重做 |
| Buffer Pool | 内存工作台,常用的纸放桌上 |
| 脏页 | 桌上改了但没归档的纸 |
| checkpoint | 归档到哪一步了 |
| 间隙锁 | 不仅锁这个人,还锁他左右两边空位 |
| 幻读 | 两次查人数多了一行,像幻觉 |
| 主从复制 | 主库写日志,从库照着演一遍 |
| GTID | 每个事务全局唯一编号,好找 |
| 慢查询 | 超过阈值被记黑账 |
| EXPLAIN | 给 SQL 拍 X 光片 |
| 回表 vs 覆盖 | 目录够用 vs 不够用要翻正文 |
| 双写 | 重要文件存两份,防写一半坏 |
记忆口诀:
索引是目录,聚簇是正文,二级是索引页。
undo 是草稿,redo 是日志,binlog 是复制剧本。
Buffer Pool 是工作台,脏页是没归档的纸。
8 名词易混对比表
面试最爱考"这两个有什么区别"。下面把最容易混淆的名词成对列出。
| 易混名词 | 区别 |
|---|---|
| redo log vs binlog | redo 是 InnoDB 物理日志管崩溃恢复;binlog 是 Server 层逻辑日志管复制 |
| 聚簇索引 vs 二级索引 | 聚簇索引叶子存整行;二级索引叶子存主键 |
| 回表 vs 覆盖索引 | 回表是二级索引再查主键;覆盖索引不用回表 |
| 脏读 vs 不可重复读 | 脏读读未提交;不可重复读是读已提交但前后两次不同 |
| MVCC vs 锁 | MVCC 读不加锁;锁是写阻塞 |
| 间隙锁 vs 临键锁 | 间隙锁只锁区间;临键锁=行锁+间隙 |
| 慢查询 vs 死锁 | 慢查询是慢;死锁是互相等 |
| 全量备份 vs 增量备份 | 全量是整库;增量是上次后变化 |
| 主从 vs 主主 | 主从是一主多从;主主是双主互写 |
| 分库 vs 分表 | 分库拆到多台机器;分表拆到同机多表 |
| TRUNCATE vs DELETE | TRUNCATE 是 DDL 清表快;DELETE 逐行可回滚 |
| DDL vs DML | DDL 改结构;DML 改数据 |
| char vs varchar | char 定长;varchar 变长 |
| MyISAM vs InnoDB | MyISAM 不支持事务行锁;InnoDB 都支持 |
| RR vs RC | RR 防幻读;RC 不防 |
| undo vs redo | undo 回滚用;redo 前滚用 |
| 一级索引 vs 二级索引 | 一级=聚簇;二级=非聚簇 |
| 唯一索引 vs 主键 | 主键不能 NULL;唯一索引可 NULL |
| 覆盖索引 vs 联合索引 | 覆盖是按查询列说;联合是按列数说 |
| 半同步 vs 异步复制 | 半同步等从库确认;异步不等 |
| 读写分离 vs 分库分表 | 前者解决读压力;后者解决容量 |
| 行锁 vs 表锁 | 行锁粒度小并发高;表锁简单但慢 |
| 乐观锁 vs 悲观锁 | 乐观锁假设不冲突用版本号;悲观锁先上锁 |
| 本地查询 vs 远程查询 | 本实例查 vs 跨库 JOIN |
| 逻辑备份 vs 物理备份 | mysqldump 导出 SQL;XtraBackup 拷文件 |
| 事务 vs 连接 | 一个连接可开多个事务 |
| commit vs rollback | 提交持久化 vs 回滚撤销 |
| 热备 vs 冷备 | 热备不停库;冷备停库 |
| 索引合并 vs 联合索引 | 索引合并是多个索引各查一点再合并;联合是一个索引 |
| 大小写敏感 | utf8mb4_general_ci 不敏感;_bin 敏感 |
-- 现场看名词对应的状态变量(本示例基于 MySQL 8.0)
SHOW STATUS LIKE 'Innodb_row_lock_waits'; -- 行锁等待次数
SHOW STATUS LIKE 'Slow_queries'; -- 慢查询累计数
SHOW VARIABLES LIKE 'transaction_isolation'; -- 当前隔离级别
-- 看到名词能对应到命令,面试就活了
9 面试中怎么用名词
背名词不是为了背诵比赛,而是为了在回答时"用词准确"。同样的意思,用行话说出来,面试官就知道你是内行。下面这张表给你示范"大白话 → 行话"的转换。
| 场景 | 大白话说法 | 行话说法(加分) |
|---|---|---|
| 索引没生效 | 这个查询没走索引 | type 是 ALL,全表扫描了 |
| 查询慢 | 查询慢 | 触发了 filesort,没走覆盖索引 |
| 数据版本 | 以前的数据怎么看 | MVCC 读 undo log 历史版本 |
| 复制延迟 | 从库跟不上 | Seconds_Behind_Master 涨了 |
| 锁冲突 | 两个事务互相等 | 触发了死锁,innodb 自动回滚 |
| 缓存 | 常用数据放内存 | Buffer Pool 命中率 |
| 写盘 | 数据刷到磁盘 | checkpoint 把脏页刷盘 |
| 日志 | 写操作记下来 | binlog ROW 模式 |
| 分页 | 翻页慢 | 深分页延迟关联优化 |
| 慢查询定位 | 找慢的 SQL | 看 slow log,用 EXPLAIN |
会用行话还有一个好处:回答时能带出更多名词,形成"名词串"。比如讲优化时说"这条 SQL 没走联合索引的最左前缀,导致 type=ALL,回表次数多,慢查询日志里能看到"。这一句话带出了五个名词,面试官一听就知道你体系完整。
9.1 高频名词出现频率排行
不是 100 个名词都一样常考。下面按面试中出现频率排序,前 20 个几乎每场必问。
| 排名 | 名词 | 出现频率 |
|---|---|---|
| 1 | 聚簇索引 | 极高 |
| 2 | MVCC | 极高 |
| 3 | 隔离级别 | 极高 |
| 4 | redo log | 极高 |
| 5 | binlog | 极高 |
| 6 | Buffer Pool | 极高 |
| 7 | 最左前缀 | 高 |
| 8 | 回表 | 高 |
| 9 | 覆盖索引 | 高 |
| 10 | 间隙锁 | 高 |
| 11 | 幻读 | 高 |
| 12 | 死锁 | 高 |
| 13 | EXPLAIN | 高 |
| 14 | 慢查询 | 高 |
| 15 | 主从复制 | 高 |
| 16 | 索引下推 | 中 |
| 17 | 自适应哈希 | 中 |
| 18 | doublewrite | 中 |
| 19 | GTID | 中 |
| 20 | 分库分表 | 中 |
| 21 | change buffer | 中 |
| 22 | checkpoint | 中 |
| 23 | filesort | 中 |
| 24 | 半同步复制 | 中 |
| 25 | 读写分离 | 中 |
| 26 | 临时表 | 低 |
| 27 | 直方图 | 低 |
| 28 | 数据字典 | 低 |
| 29 | 页分裂 | 低 |
| 30 | 自增锁模式 | 低 |
复习优先级:先把前 20 个练到脱口而出,再补中间 10 个,最后扫低频的。
9.2 名词复习计划表
100 个名词一天背完第二天就忘。下面这张表给你一个 5 天复习节奏。
| 天数 | 任务 | 目标 |
|---|---|---|
| 第 1 天 | 过一遍索引+事务锁(1~40) | 建立印象 |
| 第 2 天 | 过一遍架构存储+SQL优化(41~80) | 建立印象 |
| 第 3 天 | 过一遍高可用(81~100)+ 易混对比表 | 区分易混 |
| 第 4 天 | 遮住解释列自测,标记说不出的 | 查漏 |
| 第 5 天 | 重点复习标记的 + 高频前 20 | 巩固 |
复习时不要默写,要"说"。对着空气讲一遍这个名词是什么,讲不顺的就是没真懂。面试时名词解释也是口头题,练说比练写更重要。
10 自测练习
自测 1:什么是回表?怎么避免?
<details>
<summary>参考答案</summary>
回表是通过二级索引拿到主键值后,再去聚簇索引查整行数据的过程。避免方法是建覆盖索引,让索引包含查询所需全部列,这样不用回表。
</details>
自测 2:redo log 和 binlog 的区别?
<details>
<summary>参考答案</summary>
redo log 是 InnoDB 引擎层的物理日志,记录页的修改,用于崩溃恢复;binlog 是 Server 层的逻辑日志,记录 SQL 语句或行变更,用于主从复制和时间点恢复。两者在两阶段提交时配合。
</details>
自测 3:MVCC 解决什么问题?
<details>
<summary>参考答案</summary>
多版本并发控制,让读操作读历史快照不加锁,写操作锁当前行。读不阻塞写,写不阻塞读,提升并发。靠 undo log 版本链和 readview 实现。
</details>
自测 4:什么是最左前缀?
<details>
<summary>参考答案</summary>
联合索引 (a,b,c) 按列顺序从最左开始匹配。查询条件必须包含 a 才能用索引;用到 a,b 才能用 (a,b);跨列跳跃(如只查 b)索引用不上。
</details>
自测 5:什么是间隙锁?什么时候加?
<details>
<summary>参考答案</summary>
间隙锁是锁索引记录之间的"间隙",防止别的事务在间隙里插入新记录,从而防幻读。在 RR 隔离级别下,范围查询(如 WHERE id BETWEEN 10 AND 20)会给这个范围加临键锁,既有记录锁也有间隙锁。
</details>
自测 6:什么是慢查询?怎么定位?
<details>
<summary>参考答案</summary>
执行时间超过 long_query_time 阈值的 SQL。定位方法:开 slow_query_log,超过阈值的 SQL 会被记录到慢日志,再用 mysqldumpslow 或 pt-query-digest 分析,找到 TOP N 慢 SQL,用 EXPLAIN 看执行计划优化。
</details>
自测 7:什么是 GTID?
<details>
<summary>参考答案</summary>
全局事务 ID,每个事务在整个集群里有唯一编号。8.0 推荐用 GTID 复制,切换从库时不用再找 binlog 文件和位置,直接靠 GTID 自动对齐,运维更简单。
</details>
自测 8:什么是 doublewrite?为什么不能关?
<details>
<summary>参考答案</summary>
doublewrite 是双写缓冲,数据页先写到共享的 doublewrite 区,再写到真实位置。防止写盘过程中机器断电导致页只写了一半(partial page write)。崩溃恢复时可以从 doublewrite 区恢复完整页。SSD 上也建议开。
</details>
自测 9:什么是 change buffer?
<details>
<summary>参考答案</summary>
对二级索引页的写操作,如果该页不在 Buffer Pool 里,不立即读盘,而是先记在 change buffer,等以后这页被读到时再合并。减少随机读盘,提升写入性能。
</details>
自测 10:什么是幻读?哪个隔离级别能防?
<details>
<summary>参考答案</summary>
幻读是同一事务内两次范围查询,第二次多了几行(其他事务新插入的)。RR 隔离级别靠间隙锁能防幻读,RC 级别不防。MySQL InnoDB 在 RR 下基本解决了幻读。
</details>
自测 11:什么是索引下推?
<details>
<summary>参考答案</summary>
5.6 引入的优化。以前二级索引查到主键后就要回表,再在 Server 层过滤;索引下推把"索引列上的条件"下推到存储引擎层,在索引遍历过程中就过滤,减少回表次数。
</details>
自测 12:什么是 checkpoint?
<details>
<summary>参考答案</summary>
脏页刷到磁盘的"归档点"。崩溃恢复时从最近的 checkpoint 开始,重放之后的 redo log。checkpoint 越新,恢复越快。InnoDB 自动触发 checkpoint。
</details>
自测 13:什么是只读节点?和主库有什么区别?
<details>
<summary>参考答案</summary>
只读节点是从库,开了 read_only,只接受查询不接受写。主库负责写,从库通过复制同步数据,分担读压力。注意 read_only 不挡超级用户,要用 super_read_only。
</details>
自测 14:什么是 N+1 查询问题?
<details>
<summary>参考答案</summary>
查列表时先查 N 条,再循环对每条查一次详情,总共查 1+N 次。性能极差。解决方法是用 JOIN 一次性查出来,或者用 IN 批量查。
</details>
自测 15:什么是统计信息?
<details>
<summary>参考答案</summary>
优化器用来决定走哪个索引的数据分布,比如索引列的基数、直方图。统计信息不准会导致优化器选错索引。8.0 有持久化统计信息。
</details>
练习 1:随机挑本篇 20 个名词,用一句话说出它是什么。
练习 2:找出本篇你说不清楚的 10 个名词,回到对应章节复习原理。
练习 3:把高频前 20 个名词,每个造一句面试中能用出来的话,写下来。
名词是 MySQL 面试的词汇表。词汇量够了,后面聊原理、聊优化才能"有话可说"。建议把本篇打印出来,通勤时翻两遍,比背任何资料都管用。
10.1 名词解释补充
| 名词 | 解释 |
|---|---|
| 回表 | 二级索引查主键再查聚簇 |
| 覆盖索引 | 索引包含全部列 |
| 最左前缀 | 联合索引从最左列匹配 |
| 索引下推 | 条件下推到引擎 |
| 间隙锁 | 锁索引间隙 |
| 临键锁 | 行锁加间隙锁 |
| 死锁 | 互相等锁 |
| MVCC | 多版本并发 |
| readview | 读视图判断可见性 |
| undo log | 回滚日志 |
| redo log | 重做日志 |
| binlog | 二进制日志 |
| Buffer Pool | 缓冲池 |
| 脏页 | 内存改了没刷盘 |
| checkpoint | 刷盘点 |
10.2 名词补充
| 名词 | 解释 |
|---|---|
| 聚簇索引 | 叶子存整行 |
| 二级索引 | 叶子存主键 |
| 回表 | 二级查主键再查聚簇 |
| 覆盖索引 | 索引含全部列 |
| 联合索引 | 多列索引 |
| 最左前缀 | 从最左列匹配 |
| 索引下推 | 条件下推引擎 |
| 间隙锁 | 锁索引间隙 |
| 临键锁 | 行锁加间隙 |
| MVCC | 多版本 |
10.3 收尾
名词是面试词汇表,建议通勤时翻。
| 复习方法 | 做法 |
|---|---|
| 说出来 | 别默写 |
| 标记 | 说不出的做标记 |
| 重复 | 第二天再复习 |
10.4 结尾
名词解释 100 条到此结束,建议反复复习。
下一篇预告:第 84 章 5.7vs8.0差异问答速查
文章回复
0 条公开回复