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%

相关推荐
j7~3 小时前
【MYSQL】在Centos7和ubuntu22.04环境下安装
数据库·c++·mysql·ubuntu·centos
常常有7 小时前
AI智能知识库问答系统(基于 FastAPI和Dify)
python·mysql·fastapi
Waay8 小时前
MySQL基础高频考点
运维·mysql·adb
omenkk79 小时前
【MySQL专题】1.一条更新SQL语句是如何执行的
数据库·sql·mysql
Lehjy9 小时前
【MySQL】库的操作
数据库·mysql·oracle
Languorous.9 小时前
MySQL CRUD实操详解:插入、查询、修改、删除,附可直接运行示例
数据库·mysql
重生之小比特9 小时前
【MySQL 数据库】用户管理与权限控制
android·数据库·mysql
杨云龙UP10 小时前
MySQL主库高峰期备份引发504故障:从库手动切换接管 + 主从恢复同步 + Docker版DB2重启实战_2026-05-17
linux·运维·数据库·mysql·docker·容器·centos
小帅记事10 小时前
MySQL 查询性能监控与分析 完整版
mysql
努力成为DBA的小王10 小时前
MySQL数据类型
数据库·mysql