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%

相关推荐
潇湘梦2 小时前
mysql团队编写规范
数据库·mysql·代码规范
hgz07102 小时前
MySQL索引数据结构:B+树 vs 哈希索
数据库·sql·mysql
技术不打烊3 小时前
MySQL锁机制全解:彻底理解行锁、表锁与死锁原理
数据库·mysql
banzhenfei3 小时前
mysql xtrabackup还原
数据库·mysql
聪明努力的积极向上3 小时前
【设计】MySQL + C# 并发分批查询 DataTable Merge 偶发报错分析及解决方案
数据库·mysql·c#
Dreamcatcher_AC3 小时前
Node.js留言板开发全流程解析
前端·javascript·mysql·node.js·express
么么...4 小时前
掌握 MySQL:约束、范式与视图详解
数据库·经验分享·sql·mysql
盒马coding4 小时前
高性能MySQL到PostgreSQL异构数据库转换工具MySQL2PG
数据库·mysql·postgresql
小Mie不吃饭4 小时前
Spring boot + mybatis-plus + Redis 实现数据多级缓存(模拟生产环境)
java·spring boot·redis·mysql·缓存