MySQL高性能优化规范建议总结
性能优化先靠规范预防,再靠监控定位。本文把团队常踩的雷区整理成可执行的 checklist。
建表规范
统一 utf8mb4;主键尽量短且单调;字段 NOT NULL + 默认值;大字段拆表;金额用 DECIMAL。
索引规范
WHERE/ORDER/JOIN 列建合适联合索引;控制索引数量;避免冗余索引;定期用 sys/performance_schema 查未使用索引。
SQL 规范
禁止 SELECT *;分页深翻页改游标或延迟关联;批量操作分批 commit;避免大事务。
1 | -- 深分页优化示例 |
连接与缓存
合理设置 max_connections 与连接池;8.0 后别指望 query cache;热点读走 Redis 但要有穿透保护。
连接池参数
池大小不是越大越好,常设 CPU*2 左右并压测。wait_timeout 与池 idle 回收协调,避免「MySQL has gone away」。
只读实例
报表/analytics 走只读副本,避免拖主库。
实践复习清单
建表规范 checklist;索引 review 季度执行;慢 SQL 治理流程;连接池大小压测;深分页改写;批处理 commit 大小;监控 buffer pool hit、锁等待。
常见坑
- 在应用层循环单条 INSERT 代替 batch。
- 监控只看 QPS 不看慢查询与锁等待。
- 上线前不做影子流量或 explain 评审。
总结与自测
建表五条规范;索引 review 查什么;深分页两种改写;连接池如何定大小;慢 SQL 治理流程有几步?把规范写成团队 PR checklist 比个人记忆更可靠。
原理延伸
InnoDB 的核心竞争力在于把 B+ 树索引、缓冲池、redo/undo 与 MVCC 组合成可预测的 OLTP 引擎。读路径尽量走缓冲池与覆盖索引,写路径则要在行锁、日志刷盘与复制延迟之间取平衡。排查问题时不要只盯单条 SQL,还要看事务边界、锁等待、buffer pool 命中率与磁盘 fsync 延迟。性能优化永远遵循「先正确、再可测、后优化」:用慢日志和 EXPLAIN 定位瓶颈,用规范设计减少回表与锁竞争,用架构手段(读写分离、缓存、分片)承接流量,而不是在未测量前堆参数。

