Yihui’s Blog

MySQL 数据库的性能优化方法有哪些?

日期:2026-07-11
难度:中等
标签:#面试 #MySQL #性能优化 #场景题 #VIP

一句话答案

MySQL 优化应从指标和瓶颈出发,依次检查 SQL 与索引、表结构、事务锁、内存与日志配置、存储硬件、复制架构和业务访问模型,并用压测验证而非盲目调参。

面试口语版

我会先建立基线,看 QPS、P99、CPU、IOPS、Buffer Pool 命中、锁等待、连接数、复制延迟和慢 SQL。最常见收益来自 SQL 和索引:减少扫描、回表、临时表、filesort 和深分页;表结构上选合理类型、短主键、控制大字段和归档冷热数据。再治理长事务、死锁、热点更新和连接池。实例层按工作集配置 Buffer Pool,评估 redo 容量、刷盘策略和磁盘性能,但不牺牲未确认的持久性。单机到瓶颈后再做缓存、读写分离、分区、分库分表或数仓分流。

原理拆解

层次典型手段
SQL慢日志、EXPLAIN ANALYZE、改写查询
索引联合/覆盖索引、删除重复索引
表结构合理类型、主键、大字段与冷热分离
事务缩短事务、统一锁顺序、降低热点
实例Buffer Pool、redo、连接与 IO 配置
架构缓存、读写分离、分片、异步化

关键细节

  • CPU 高可能是扫描行数过大,IO 高可能是缓存不足或随机访问;必须先找到资源因果链。
  • 命中率、平均耗时等单一指标可能掩盖 P99 和热点 SQL。
  • 参数优化应有回退方案,特别是持久性、复制和内存相关参数。

面试官追问

  1. CPU 突然升高如何排查?
  2. Buffer Pool 多大合适?
  3. 为什么加索引可能让系统更慢?
  4. 何时需要分库分表?

高分补充

用“发现—归因—改动—压测—灰度—回归监控”形成闭环,优化目标应绑定业务 SLO,而不是追求某个参数好看。

学习清单

  • 按 SQL、存储、事务、实例、架构五层准备案例。
维护与整理 · Yihui在 GitHub 上编辑

继续阅读

浏览全部文章

SQL与NoSQL有什么区别?MySQL和MongoDB如何选型?实际项目中如何选择?

日期:2026-09-27 标签:#面试 #MySQL #数据库 难度:简单 来源:牛面 MySQL 题库 答案说明:独立整理(站内题目标记为 VIP,未读取会员答案) 一句话答案 MySQL与MongoDB的主要差异在数据模型、事务边界、查询方式和模式演化;按业务访问模式和一致性需求选型。 面试口语版(约 60…

阅读全文