1. 硬件层面优化
innodb_buffer_pool_size)。thread_cache_size、max_threads等参数与CPU核心数匹配。2. 配置文件(my.cnf)调优
配置文件通常位于/etc/my.cnf或/etc/mysql/my.cnf,需根据服务器内存大小调整核心参数:
innodb_buffer_pool_size设置为服务器总内存的70%-80%(如16GB内存可设为12GB),用于缓存数据和索引,是提升InnoDB性能的关键参数。innodb_log_file_size设置为256M-2G(根据写入负载调整),较大的日志文件能减少日志刷盘次数,提高写入性能;innodb_flush_log_at_trx_commit可设为2(牺牲少量数据安全性换取更高性能,适用于对数据一致性要求不高的场景)。max_connections设置为500-1000(根据应用并发需求调整),避免过多连接导致内存耗尽;同时设置thread_cache_size=8-16,缓存空闲线程,减少线程创建开销。query_cache_size设置为64M-256M(仅适用于读多写少场景),query_cache_type=1(启用查询缓存),缓存查询结果以提高重复查询速度。tmp_table_size=max_heap_table_size=64M-256M,增大临时表大小,避免大查询因临时表溢出到磁盘而变慢;sort_buffer_size=4M-8M、read_buffer_size=4M-8M,优化排序和读取操作。3. 索引优化
WHERE、JOIN、ORDER BY子句中的列创建索引(如主键、唯一索引、普通索引),加速数据检索。(user_id, create_time)),遵循最左前缀原则(查询条件需包含索引左侧列)。SHOW INDEX FROM table_name检查并删除未使用的索引。4. 查询语句优化
EXPLAIN SELECT ...查看查询计划,识别全表扫描、未使用索引等问题,针对性优化SQL。SELECT id, name FROM users),减少数据传输量和内存占用。INNER JOIN代替LEFT JOIN/RIGHT JOIN,减少不必要的行匹配;确保JOIN字段有索引。LIMIT 10000, 10),使用WHERE id > last_id LIMIT 10(基于上一页最后一条记录的ID),避免OFFSET的大偏移量扫描。5. 定期维护操作
OPTIMIZE TABLE table_name(适用于MyISAM和InnoDB表),重组表数据和索引,减少碎片占用。binlog,通过expire_logs_days设置过期天数)和慢查询日志(slow_query_log,定期归档),释放磁盘空间。ANALYZE TABLE table_name更新表的统计信息,帮助优化器生成更优的执行计划。6. 工具辅助调优
mysqltuner(sudo yum install mysqltuner),运行后可生成详细的性能报告,包括内存分配建议、索引使用情况、查询缓存命中率等,帮助定位优化点。slow_query_log=1、slow_query_log_file=/var/log/mysql/slow-queries.log、long_query_time=2),使用mysqldumpslow或pt-query-digest工具分析慢查询,针对性优化。Prometheus+Grafana、Zabbix或MariaDB Monitor监控数据库性能指标(如QPS、TPS、连接数、缓存命中率),实时掌握数据库状态。