MySQL 进阶使用专栏导览
摘要: 本专栏围绕后端开发中最高频的 MySQL 使用场景展开,不做 API 手册式的罗列,而是针对每一个开发者”绕不过去”的核心技能,讲透为什么要这样做、不这样做会出什么问题、底层机制如何支撑上层用法。从索引设计到 SQL 调优,从事务使用到分库分表,从慢查询诊断到数据迁移——这些是真实业务开发中 80% 的 MySQL 问题所在,也是本专栏要逐一击破的靶心。
专栏定位
本专栏与同目录下的《MySQL 架构与底层原理》专栏形成互补。本专栏侧重”用好 MySQL”——面向后端开发者和初中级 DBA,解决日常开发中”索引怎么建”、“SQL 为什么慢”、“事务怎么用才安全”、“表大了怎么办”等实际问题;而《MySQL 架构与底层原理》专栏侧重”理解 MySQL”——即 InnoDB 存储引擎内核、事务与锁机制、主从复制底层实现等原理层面的深度剖析。
专栏目录
| 序号 | 文件名 | 核心摘要 |
|---|---|---|
| 01 | 01 索引设计实战——从建错索引到建对索引 | 为什么加了索引反而更慢?从 B+Tree 的物理结构出发,讲透聚簇索引与二级索引的本质区别,覆盖索引如何避免回表,联合索引的最左前缀匹配规则与”索引跳跃扫描”,索引选择性(Cardinality)对查询性能的影响,前缀索引的截断长度如何确定,以及生产中最常见的 5 类索引失效场景与规避策略 |
| 02 | 02 SQL 调优方法论——从 EXPLAIN 到执行计划重写 | EXPLAIN 输出的每一列到底在说什么?type 列从 ALL 到 const 的性能阶梯,Extra 列中 Using filesort、Using temporary、Using index condition 的真实含义,慢查询的系统化分析流程(定位 → 诊断 → 改写 → 验证),子查询 vs JOIN 的优化器行为差异,分页深翻(LIMIT 100000, 10)的性能灾难与延迟关联解法 |
| 03 | 03 事务与隔离级别的正确打开方式 | 开发中”用事务”不等于”用对事务”。四种隔离级别在实际业务中该选哪个?RC 与 RR 的行为差异对业务逻辑的影响,长事务的六宗罪(Undo 膨胀、锁持有时间长、主从延迟放大……),Spring @Transactional 的常见陷阱(自调用失效、异常类型不匹配),以及如何通过合理拆分事务边界来降低锁冲突 |
| 04 | 04 锁与并发控制——开发者必须理解的死锁问题 | 为什么两条看似无关的 UPDATE 会互相死锁?行锁、间隙锁、临键锁在不同 SQL 语句下的加锁规则,SELECT ... FOR UPDATE 与 SELECT ... LOCK IN SHARE MODE 的使用场景与风险,乐观锁(版本号机制)vs 悲观锁的工程权衡,死锁日志(SHOW ENGINE INNODB STATUS)的阅读方法与死锁预防策略 |
| 05 | 05 表设计与数据类型选择——从需求到 Schema 的工程决策 | 数据类型选择不是”能存就行”。INT vs BIGINT 的存储代价差异,VARCHAR(255) 为什么是个”魔法数字”,DATETIME vs TIMESTAMP 的时区陷阱,DECIMAL vs FLOAT/DOUBLE 的精度保证,枚举字段用 ENUM 还是 TINYINT?范式化与反范式化的工程权衡(冗余字段到底该不该加?),以及大字段(TEXT/BLOB)的存储策略与查询性能影响 |
| 06 | 06 分库分表——当单表撑不住时的架构演进 | 分库分表不是”银弹”,而是”最后手段”。单表多大才需要拆?垂直拆分与水平拆分的决策树,分片键(Sharding Key)的选择原则与常见错误,分布式 ID 生成方案(Snowflake、号段模式、UUID 的优劣对比),跨分片查询与分布式事务的代价,ShardingSphere 与 Vitess 等中间件的架构对比,以及”先扩表结构、再加缓存、最后才分库分表”的渐进式扩容路线 |
| 07 | 07 慢查询诊断与性能监控体系 | 线上突然变慢了,怎么快速定位?慢查询日志(slow_query_log)的配置与分析工具(mysqldumpslow、pt-query-digest),Performance Schema 关键表的使用方法,SHOW PROCESSLIST 与 information_schema.INNODB_TRX 的实时诊断技巧,从”CPU 飙高”、“连接数打满”、“磁盘 I/O 告警”三种典型告警场景出发的根因排查流程 |
| 08 | 08 MySQL 与缓存的协作模式——一致性问题的工程解法 | ”先删缓存还是先更新数据库”不是一道选择题,而是一道分析题。Cache-Aside、Read/Write-Through、Write-Behind 三种模式的适用场景,缓存穿透/击穿/雪崩的成因与防御,延迟双删策略的时间窗口问题,基于 Binlog 订阅(Canal)的异步缓存更新方案,以及”最终一致性”在不同业务场景下的容忍度分析 |
| 09 | 09 数据迁移与版本升级——零停机变更的实战策略 | 大表加列为什么会锁表?Online DDL 的三种算法(COPY / INPLACE / INSTANT)的适用范围与限制,gh-ost 与 pt-online-schema-change 的工作原理与选型对比,MySQL 5.7 到 8.0 版本升级的兼容性检查清单,数据迁移的灰度切流方案(双写 → 对比 → 切读 → 切写),以及回滚预案的设计原则 |
| 10 | 10 MySQL 高可用方案选型——从主从到 MGR 的架构决策 | 为什么”一主一从”不算高可用?主从复制的延迟问题与半同步复制的补救,MHA / Orchestrator 等高可用组件的故障切换机制,MySQL Group Replication(MGR)的 Paxos 共识协议与单主/多主模式选择,ProxySQL / MySQL Router 等中间件的读写分离配置,以及不同业务规模下的高可用方案推荐(小团队 → 中型业务 → 大规模集群) |
阅读建议
- 第 1-2 篇 是所有 MySQL 开发者的必修课——索引与 SQL 调优直接决定线上系统性能
- 第 3-4 篇 聚焦事务与并发,适合处理交易类、库存类等对一致性要求高的业务场景
- 第 5 篇 是项目初期的关键决策,表设计一旦定型后期修改代价极大
- 第 6 篇 适合系统已进入增长期、单库性能瓶颈初现时阅读
- 第 7-8 篇 面向线上运维场景,是保障系统稳定性的核心技能
- 第 9-10 篇 面向架构演进场景,适合需要做技术升级或高可用建设的团队
前置知识
本专栏假设读者具备基本的 SQL 增删改查能力和关系型数据库的基础概念。如需深入理解 MySQL 底层实现机制,请参阅同目录下的《MySQL 架构与底层原理》专栏。
关联专栏
- MySQL 架构与底层原理:底层原理是进阶使用的基础
- MyBatis:ORM 层与 MySQL 的配合使用
- 分布式事务:分库分表场景下的分布式事务方案