MySQL 进阶使用专栏导览

摘要: 本专栏围绕后端开发中最高频的 MySQL 使用场景展开,不做 API 手册式的罗列,而是针对每一个开发者”绕不过去”的核心技能,讲透为什么要这样做、不这样做会出什么问题、底层机制如何支撑上层用法。从索引设计到 SQL 调优,从事务使用到分库分表,从慢查询诊断到数据迁移——这些是真实业务开发中 80% 的 MySQL 问题所在,也是本专栏要逐一击破的靶心。

专栏定位

本专栏与同目录下的《MySQL 架构与底层原理》专栏形成互补。本专栏侧重”用好 MySQL”——面向后端开发者和初中级 DBA,解决日常开发中”索引怎么建”、“SQL 为什么慢”、“事务怎么用才安全”、“表大了怎么办”等实际问题;而《MySQL 架构与底层原理》专栏侧重”理解 MySQL”——即 InnoDB 存储引擎内核、事务与锁机制、主从复制底层实现等原理层面的深度剖析。


专栏目录

序号文件名核心摘要
0101 索引设计实战——从建错索引到建对索引为什么加了索引反而更慢?从 B+Tree 的物理结构出发,讲透聚簇索引与二级索引的本质区别,覆盖索引如何避免回表,联合索引的最左前缀匹配规则与”索引跳跃扫描”,索引选择性(Cardinality)对查询性能的影响,前缀索引的截断长度如何确定,以及生产中最常见的 5 类索引失效场景与规避策略
0202 SQL 调优方法论——从 EXPLAIN 到执行计划重写EXPLAIN 输出的每一列到底在说什么?type 列从 ALLconst 的性能阶梯,Extra 列中 Using filesortUsing temporaryUsing index condition 的真实含义,慢查询的系统化分析流程(定位 → 诊断 → 改写 → 验证),子查询 vs JOIN 的优化器行为差异,分页深翻(LIMIT 100000, 10)的性能灾难与延迟关联解法
0303 事务与隔离级别的正确打开方式开发中”用事务”不等于”用对事务”。四种隔离级别在实际业务中该选哪个?RC 与 RR 的行为差异对业务逻辑的影响,长事务的六宗罪(Undo 膨胀、锁持有时间长、主从延迟放大……),Spring @Transactional 的常见陷阱(自调用失效、异常类型不匹配),以及如何通过合理拆分事务边界来降低锁冲突
0404 锁与并发控制——开发者必须理解的死锁问题为什么两条看似无关的 UPDATE 会互相死锁?行锁、间隙锁、临键锁在不同 SQL 语句下的加锁规则,SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE 的使用场景与风险,乐观锁(版本号机制)vs 悲观锁的工程权衡,死锁日志(SHOW ENGINE INNODB STATUS)的阅读方法与死锁预防策略
0505 表设计与数据类型选择——从需求到 Schema 的工程决策数据类型选择不是”能存就行”。INT vs BIGINT 的存储代价差异,VARCHAR(255) 为什么是个”魔法数字”,DATETIME vs TIMESTAMP 的时区陷阱,DECIMAL vs FLOAT/DOUBLE 的精度保证,枚举字段用 ENUM 还是 TINYINT?范式化与反范式化的工程权衡(冗余字段到底该不该加?),以及大字段(TEXT/BLOB)的存储策略与查询性能影响
0606 分库分表——当单表撑不住时的架构演进分库分表不是”银弹”,而是”最后手段”。单表多大才需要拆?垂直拆分与水平拆分的决策树,分片键(Sharding Key)的选择原则与常见错误,分布式 ID 生成方案(Snowflake、号段模式、UUID 的优劣对比),跨分片查询与分布式事务的代价,ShardingSphere 与 Vitess 等中间件的架构对比,以及”先扩表结构、再加缓存、最后才分库分表”的渐进式扩容路线
0707 慢查询诊断与性能监控体系线上突然变慢了,怎么快速定位?慢查询日志(slow_query_log)的配置与分析工具(mysqldumpslowpt-query-digest),Performance Schema 关键表的使用方法,SHOW PROCESSLISTinformation_schema.INNODB_TRX 的实时诊断技巧,从”CPU 飙高”、“连接数打满”、“磁盘 I/O 告警”三种典型告警场景出发的根因排查流程
0808 MySQL 与缓存的协作模式——一致性问题的工程解法”先删缓存还是先更新数据库”不是一道选择题,而是一道分析题。Cache-Aside、Read/Write-Through、Write-Behind 三种模式的适用场景,缓存穿透/击穿/雪崩的成因与防御,延迟双删策略的时间窗口问题,基于 Binlog 订阅(Canal)的异步缓存更新方案,以及”最终一致性”在不同业务场景下的容忍度分析
0909 数据迁移与版本升级——零停机变更的实战策略大表加列为什么会锁表?Online DDL 的三种算法(COPY / INPLACE / INSTANT)的适用范围与限制,gh-ost 与 pt-online-schema-change 的工作原理与选型对比,MySQL 5.7 到 8.0 版本升级的兼容性检查清单,数据迁移的灰度切流方案(双写 → 对比 → 切读 → 切写),以及回滚预案的设计原则
1010 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 架构与底层原理》专栏。


关联专栏