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%

相关推荐
这个DBA有点耶7 小时前
MySQL迁移实战:从mysqldump到专业工具的完整选型指南
数据库·mysql·dba
01_ice9 小时前
MySQL内外连接
数据库·mysql
量子炒饭大师11 小时前
MySQL 5.7 在 CentOS 7 环境安装:从清理 MariaDB 到初始化与完善配置
数据库·mysql·centos·mariadb
聊浮游13 小时前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
MacroZheng13 小时前
完美替代 Navicat!这款内置 AI 的数据库工具,太香了!
java·后端·mysql
文人sec15 小时前
普通索引和唯一索引、count(*)为何慢?、order bay怎么工作?
数据库·mysql·数据分析·数据库架构
没文化的阿浩15 小时前
【MySQL】数据类型
android·mysql·adb
某不知名網友16 小时前
MySQL数据库库级操作|创建、字符集、修改删除、备份恢复
数据库·mysql
某不知名網友18 小时前
MySQL数据表详解|创建、查看、修改、删除实战教程
数据库·mysql
01_ice1 天前
MySQL库和表的操作
数据库·mysql