MySQL 数据库优化极简教程:快速提升性能

一、基础优化(10 分钟上手)

1. 配置文件(my.cnf/my.ini)核心调整

ini 复制代码
max\_connections = 1000           连接数上限(默认151)

innodb\_buffer\_pool\_size = 2G     InnoDB缓存(物理内存50%-70%)

slow\_query\_log = 1               开启慢查询日志

long\_query\_time = 2              记录>2秒的SQL

innodb\_flush\_log\_at\_trx\_commit = 2   读写分离场景提升性能

修改后重启:

systemctl restart mysqld

(Linux)/ 服务面板重启(Windows)

2. 表结构优化

  • 数据类型:手机号用CHAR(11)、年龄用TINYINT、时间用DATETIME

  • 避免TEXT/BLOB存大文件,改用文件服务器存路径

  • 必加主键(自增 INT 优先),查询频繁字段加索引,多条件查用联合索引(遵循最左前缀)

二、SQL 优化(避坑即提速)

1. 慢查询定位

  • 查日志:tail -f /var/log/mysql/slow.log(Linux)

  • 分析 SQL:EXPLAIN + 你的SQL(看type是否为 ALL,key是否为 NULL)

2. 核心优化技巧

反例 正例
SELECT * FROM user WHERE id=1 SELECT id,username FROM user WHERE id=1
WHERE DATE(create_time)='2024-01-01' WHERE create_time BETWEEN '2024-01-01 00:00:00' AND '2024-01-01 23:59:59'
WHERE id IN (SELECT user_id FROM order) SELECT u.* FROM user u JOIN order o ON u.id=o.user_id
LIMIT 10000, 20 WHERE id>10000 LIMIT 20

3. 索引避坑

  • 不生效场景:!=IS NOT NULL、字符串不加引号、联合索引不满足最左前缀

  • 小表(不建索引,频繁更新字段慎建索引

三、进阶优化(生产环境必备)

1. 读写分离

  • 主库写(INSERT/UPDATE/DELETE),从库读(SELECT)

  • 核心步骤:主库开二进制日志→从库配置 server-id→主库建复制用户→从库执行同步命令→启动复制

2. 分库分表

  • 单表 > 1000 万行用:

    • 水平分表:按时间(订单表)、ID 范围 / 哈希(用户表)

    • 垂直分表:大表拆小(用户基本表 + 详情表)

  • 工具:Sharding-JDBC(轻量)、MyCat(中间件)

3. 硬件 / 系统优化

  • 用 SSD、数据与日志分盘存

  • Linux 关闭 Swap:swapoff -a

  • 调整文件描述符:echo "* soft nofile 65535" >> /etc/security/limits.conf

四、优化验证

1. 关键指标(执行SHOW GLOBAL STATUS;

  • Threads_connected:连接数≤max_connections

  • Slow_queries:慢查询数越少越好

  • Innodb_buffer_pool_read_hit_rate:缓存命中率 > 99%

相关推荐
IT小盘12 分钟前
08-FastAPI加MySQL实现AI对话记录持久化
android·mysql·fastapi
TiDB 社区干货传送门13 分钟前
TiDB 8.5.7 发版|六项实用功能上线
数据库·mysql·tidb
Vect__1 小时前
MySQL 内连接和外连接:从匹配关系到业务查询
数据库·mysql
Now喔2 小时前
mysql-笔记一
mysql
foo1st2 小时前
MySQL 8.0(Windows)升级笔记
数据库·笔记·mysql
Database_Cool_3 小时前
云数据库备份是怎么实现的、支持时间点恢复吗:阿里云 RDS MySQL 备份与 PITR 详解
数据库·mysql·阿里云
Database_Cool_13 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
Database_Cool_14 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白15 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
liuxiaowei316 小时前
【绝版教程】新版MySQL DBA高级实战进阶班 MySQL8.0 姜承尧-腾讯数据库总监
数据库·mysql·dba