一、硬件优化:提升基础性能支撑
innodb_thread_concurrency
)。二、配置文件调优:核心参数优化
innodb_buffer_pool_size
:设置为系统内存的50%-80%(InnoDB引擎的核心缓存,影响数据读取效率);key_buffer_size
:用于MyISAM索引缓存(若使用MyISAM表,建议设置为内存的20%-30%);tmp_table_size
/max_heap_table_size
:增加临时表大小(避免大查询因临时表满而转为磁盘临时表)。max_connections
:根据应用需求调整(避免过多连接导致资源耗尽);thread_cache_size
:缓存线程以减少创建/销毁开销(建议设置为100-200)。innodb_log_file_size
:增大重做日志文件大小(如256M-512M),减少日志切换频率;innodb_flush_log_at_trx_commit
:设置为2(平衡性能与数据安全性,牺牲少量持久性换取更高写入性能);slow_query_log
:启用慢查询日志(记录执行时间超过阈值的查询,帮助定位性能瓶颈)。三、索引优化:加速查询的关键
WHERE
、JOIN
、ORDER BY
的列创建索引(如主键、唯一索引、普通索引)。(col1, col2, col3)
可覆盖col1
、col1+col2
、col1+col2+col3
的查询)。ANALYZE TABLE
更新索引统计信息,使用OPTIMIZE TABLE
重建碎片化索引。四、查询优化:减少数据库负载
EXPLAIN
命令查看查询执行计划(识别全表扫描、索引未使用等问题)。WHERE YEAR(create_time) = 2025
会导致索引失效,改为WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31'
)。JOIN
比子查询更高效(如SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.a_id
)。LIMIT offset, size
时,可通过子查询优化(如SELECT * FROM table WHERE id > last_id ORDER BY id LIMIT size
,其中last_id
为上一页最后一条记录的ID)。五、缓存优化:减少重复计算
query_cache_size
(如设置为64M-256M),但需注意高并发写入场景下可能降低性能(MySQL 8.0已移除查询缓存,可替代为Redis/Memcached)。table_open_cache
(表缓存,减少表打开/关闭次数)、table_definition_cache
(表定义缓存,提高表结构读取效率)。六、定期维护:保持数据库健康
OPTIMIZE TABLE
命令(整理表碎片,提高数据读取效率,适用于频繁更新的表)。mysqldump
、xtrabackup
等工具),并测试恢复流程(确保数据安全)。七、监控与分析:持续优化依据
top
、htop
、iostat
、vmstat
等工具监控CPU、内存、磁盘I/O使用情况;使用SHOW STATUS
、SHOW PROCESSLIST
查看数据库状态(如活跃连接、锁等待)。pt-query-digest
、mysqldumpslow
等工具分析慢查询日志(找出执行慢的查询,针对性优化)。