当前位置: 首页 > news >正文

MySQL 调优

MySQL 调优

一、第一步:慢查询优化(最见效、优先级最高)

1. 开启慢查询日志(定位问题 SQL)

# my.cnf 配置 slow_query_log = 1 long_query_time = 1 # 超过1秒的SQL记录 slow_query_log_file = /var/log/mysql/slow.log log_queries_not_using_indexes = 1 # 记录未使用索引的SQL

查看慢 SQL:

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

2. 通用 SQL 优化规则

  1. 禁止SELECT *,只查需要的字段
  2. 避免在索引列上运算 / 函数❌ 坏:WHERE YEAR(create_time) = 2025✅ 好:WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31'
  3. 少用OR,改用IN
  4. 分页深分页优化❌ 坏:LIMIT 100000,20✅ 好:WHERE id > 100000 LIMIT 20
  5. JOIN 最多 2~3 张表,关联字段必须同类型、同编码
  6. 避免子查询,改用 JOIN

二、第二步:索引优化(性能提升核心)

1. 最佳索引设计原则

  • 高频查询字段建索引:where、order by、group by、join 字段
  • 联合索引遵循最左前缀原则例:索引(a,b,c),可命中:a /a+b /a+b+c
  • 单表索引不超过 5 个,避免写入变慢
  • 区分度低的字段不建索引(性别、状态)

2. 用 EXPLAIN 分析 SQL

EXPLAIN SELECT * FROM user WHERE name = '张三';

重点看 3 列:

  • type:最优 > 最差:system > const > eq_ref >range>ref> ALLALL = 全表扫描,必须优化
  • key:实际使用的索引(NULL = 没命中)
  • rows:扫描行数(越小越好)

3. 索引失效场景(必避坑)

  • 使用!=NOT INIS NULL
  • 字符串不加引号
  • 联合索引不满足最左前缀
  • LIKE 以 % 开头(%abc

三、第三步:MySQL 配置调优(my.cnf)

根据服务器内存调整,核心参数如下:

1. 连接与并发

max_connections = 1000 # 最大连接数 wait_timeout = 600 # 空闲连接关闭时间 interactive_timeout = 600

2. 内存配置(最重要)

# 缓冲池(InnoDB 最重要参数) # 建议:物理内存的 50%~70% innodb_buffer_pool_size = 16G # 32G内存服务器举例 innodb_log_file_size = 2G # 事务日志大小 innodb_flush_log_at_trx_commit = 1 # 安全优先 # 高并发写入可改为 2,提升性能

3. 临时表与排序

tmp_table_size = 256M max_heap_table_size = 256M sort_buffer_size = 2M join_buffer_size = 2M

4. 其他关键优化

default-storage-engine = InnoDB character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci innodb_file_per_table = 1 # 独立表空间

四、第四步:表结构与架构调优

1. 表设计规范

  • 使用合适的数据类型int 够用就不用 bigint;时间用 datetime 不用 varchar
  • 字段尽量NOT NULL,用默认值代替 NULL
  • 大表拆小:垂直拆分(字段)、水平拆分(数据)
  • 禁止使用外键(业务层保证完整性)

2. 架构优化(高并发必备)

  1. 读写分离:主库写,从库读
  2. 分库分表:单表超过 1000w 数据考虑
  3. 加缓存:Redis 缓存热点数据,减少 DB 压力

五、快速排查命令(运维必备)

-- 查看当前运行SQL SHOW PROCESSLIST; -- 查看InnoDB状态 SHOW ENGINE INNODB STATUS; -- 查看配置 SHOW VARIABLES LIKE '%buffer_pool%'; -- 查看性能指标 SHOW STATUS LIKE '%Threads%'; SHOW STATUS LIKE '%Slow_queries%';

六、调优优先级总结

  1. 慢 SQL 优化→ 2.索引优化→ 3.配置调优→ 4.架构升级90% 的性能问题都能在前两步解决。

总结

  1. 调优先找慢 SQL,不要上来改配置
  2. 索引是性能关键,联合索引 + 最左前缀是核心
  3. InnoDB 缓冲池innodb_buffer_pool_size是最关键配置
  4. 高并发最终靠读写分离 + 分库分表 + 缓存解决
http://www.jsqmd.com/news/697338/

相关文章:

  • Nintendo Switch大气层系统终极指南:如何在5分钟内完成专业级自制系统部署?
  • 2026年山东断桥铝门窗与系统阳光房选购完全指南:泰安峰睿门窗定制方案深度评测 - 企业名录优选推荐
  • 网易云音乐NCM格式终极解密:3分钟掌握免费转换技巧,彻底解放你的音乐库
  • 如何构建航班价格自动化监控系统以应对动态定价挑战?
  • Hotkey Detective:深入解析Windows热键冲突检测的技术实现与实战应用
  • AUTOSAR BswM模块深度解析:从“模式仲裁”到“动作列表”,如何像搭积木一样设计汽车ECU的大脑?
  • 2026年山东断桥铝门窗与系统阳光房选购避坑指南:找到官方直达渠道的正确姿势 - 企业名录优选推荐
  • 5分钟为Windows添加无限虚拟显示器:终极配置指南
  • 软件/游戏存档路径计算工具补充unity游戏引擎适配
  • 如何高效使用Mermaid在线编辑器:5个实用技巧全解析
  • 如何快速解决Windows热键冲突:Hotkey Detective完全指南
  • 拒绝“AI贴图感”!亲测全网,这才是平面设计师找的AI海报设计工具首选
  • BarrageGrab:全平台直播弹幕抓取的终极解决方案
  • Docker拉取Milvus 2.0镜像慢到怀疑人生?试试这个组合加速方案(阿里云镜像+手动替换)
  • 2026年山东断桥铝门窗与系统阳光房选购完全指南 - 企业名录优选推荐
  • 别再用平台了!手把手教你用纯QT C++从零搭建游戏框架(附超级玛丽源码解析)
  • 2026年毕业论文AI检测日趋严格?收藏降AI工具助你高效通过 - 降AI实验室
  • Qt Creator集成clang-format:告别团队协作中的代码风格之争
  • MT5 Zero-Shot中文增强效果深度测评:与BERT-wwm、ChatGLM对比分析
  • Windows Cleaner:告别C盘爆红,让你的Windows系统重获新生
  • 做题记录(Chemistry)
  • 原神帧率解锁终极指南:如何轻松突破60FPS限制实现高刷新率体验
  • 2026年山东断桥铝门窗与系统阳光房选购完全指南:泰安峰睿门窗官方对接 - 企业名录优选推荐
  • 即时编译器:解释执行与热点代码编译的切换
  • 终极解决方案:3步轻松重置Navicat试用期,告别14天限制
  • 免费解锁专业直播画面:StreamFX 终极指南
  • 京东E卡闲置不用怎么办?这几个方法帮你解决 - 抖抖收
  • uv与conda
  • 告别环境配置烦恼:用Docker容器在Mac上轻松搞定Go CGO交叉编译(以K8s为例)
  • 从校园卡到智能钥匙:手把手教你用NT3H1101芯片DIY一个会发光的NFC标签(附PCB天线设计避坑指南)