性能优化
SQL 执行全流程 ⭐⭐⭐⭐⭐
MySQL 架构概览
┌─────────────────────────────────────┐
│ 客户端 │
└────────────────┬────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ Server 层 │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 连接器 │ → │ 查询缓存 │ → │ 解析器 │ │
│ │ (Connector) │ │ (Query Cache) │ │ (Parser) │ │
│ │ 连接管理/权限 │ │ 8.0 已移除 │ │ 词法/语法分析 │ │
│ └─────────────────┘ └─────────────────┘ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 执行器 │ ← │ 优化器 │ │
│ │ (Executor) │ │ (Optimizer) │ │
│ │ 调用存储引擎 │ │ 生成执行计划 │ │
│ └────────┬────────┘ └─────────────────┘ │
└──────────────────────────────────┼───────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ 存储引擎层 │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ InnoDB │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ Buffer Pool │ │ Change Buffer│ │ Log Buffer │ │ │
│ │ │ 数据缓存 │ │ 写缓冲 │ │ 日志缓冲 │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────────────┐
│ 磁盘存储 │
│ 表空间文件(.ibd) │ Redo Log │ Undo Log │ Binlog │
└──────────────────────────────────────────────────────────────────────────────┘SQL 执行步骤详解
慢查询分析 ⭐⭐⭐⭐⭐
开启慢查询日志
分析慢查询日志
EXPLAIN 执行计划详解
type 列(访问类型)⭐⭐⭐⭐⭐
Extra 列(重要提示)⭐⭐⭐⭐
EXPLAIN FORMAT=JSON
EXPLAIN ANALYZE(MySQL 8.0.18+)
SQL 优化技巧 ⭐⭐⭐⭐⭐
索引优化
1. 避免索引失效
2. 利用覆盖索引
3. 最左前缀原则
JOIN 优化
1. 小表驱动大表
2. JOIN 类型选择
3. 避免 JOIN 过多
子查询优化
ORDER BY 优化
GROUP BY 优化
LIMIT 优化
COUNT 优化
表结构优化 ⭐⭐⭐⭐
数据类型选择
场景
推荐类型
说明
字符集选择
范式与反范式
垂直拆分
水平拆分
InnoDB 参数调优 ⭐⭐⭐⭐⭐
Buffer Pool 配置
Redo Log 配置
其他重要参数
连接池优化 ⭐⭐⭐
MySQL 连接数配置
应用层连接池
ProxySQL 中间层
缓存策略 ⭐⭐⭐⭐
应用层缓存
数据库缓存
读写分离 ⭐⭐⭐⭐
主从架构
实现方案
主从延迟处理
监控与诊断 ⭐⭐⭐⭐
关键指标监控
Performance Schema
sys Schema(MySQL 5.7+)
面试高频问题 ⭐⭐⭐⭐⭐
Q1: MySQL 慢查询如何优化?
Q2: 如何判断一条 SQL 是否需要优化?
Q3: 深分页问题如何解决?
Q4: 如何优化 COUNT(*) 查询?
Q5: Buffer Pool 如何配置?
Q6: 如何处理主从延迟?
Q7: 如何定位线上 MySQL 问题?
Q8: innodb_flush_log_at_trx_commit 参数如何选择?
值
行为
性能
安全性
总结
核心要点
优化方法论
记住这些关键点
Last updated