1. 硬件资源升级
2. 数据库配置优化
innodb_buffer_pool_size是InnoDB存储引擎的核心参数,建议设置为系统内存的50%-80%(仅使用InnoDB时)。该参数决定了InnoDB缓存数据和索引的内存大小,增大此值能减少磁盘I/O。max_connections需根据应用并发需求调整(如100-300),避免过多连接导致内存耗尽;thread_cache_size可缓存空闲线程,减少线程创建/销毁的开销(MariaDB 10.2+无需频繁调整)。query_cache_type=OFF)。仅在数据变化不频繁且重复查询多的场景下启用(如query_cache_type=DEMAND),并设置合理的query_cache_size(如100M)和query_cache_limit(单条查询缓存上限,默认1M)。innodb_log_file_size(如1-2G)和innodb_log_files_in_group(如2-4)增大重做日志大小,减少日志刷盘频率,提升写入性能;sync_binlog设置为0(性能优先)或1(数据安全优先),根据业务需求权衡。3. 索引优化
WHERE、JOIN、ORDER BY、GROUP BY子句中频繁使用的列创建索引(如B树索引)。避免过度索引(过多索引会增加写入开销)。CREATE INDEX idx_name_age ON users(name, age)),并将查询中最常用的列放在前面。OPTIMIZE TABLE命令重建索引,整理索引碎片;通过SHOW INDEX FROM table_name查看索引使用情况,删除未使用的索引。4. 查询语句优化
EXPLAIN SELECT ...命令查看查询执行计划,识别性能瓶颈(如全表扫描、未使用索引),针对性优化。SELECT id, name FROM users而非SELECT * FROM users)。JOIN条件中的列有索引;优先使用INNER JOIN而非OUTER JOIN(OUTER JOIN性能更低);避免子查询(子查询可能转化为临时表,影响性能)。LIMIT offset, size限制返回的行数(如SELECT * FROM products LIMIT 0, 10)。WHERE YEAR(create_time) = 2025会导致索引失效,改为WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31'。5. 定期维护
OPTIMIZE TABLE命令(如每周一次),整理表碎片,回收未使用的空间(尤其适用于频繁插入/删除的表)。DELETE FROM logs WHERE create_time < '2024-01-01'),释放存储空间。ANALYZE TABLE命令手动更新,帮助优化器生成更优的执行计划。6. 连接与缓存优化
mysqlnd、HikariCP)管理数据库连接,减少连接创建和销毁的开销,提高并发处理能力。7. 监控与分析
slow_query_log=ON和long_query_time=1(记录执行时间超过1秒的查询),通过mysqldumpslow或pt-query-digest工具分析慢查询,定位性能瓶颈。top、htop、vmstat、iostat等工具监控系统资源(CPU、内存、磁盘I/O);使用Prometheus+Grafana、Zabbix等工具实时监控数据库性能(如QPS、TPS、连接数、缓冲池命中率),及时发现并解决问题。