硬件是数据库性能的基础,需根据业务规模合理配置:
操作系统配置直接影响MySQL资源利用率:
async(异步写入)、noatime(不记录访问时间)等参数;vm.swappiness=0-10,减少交换分区使用)、TCP栈(vm.dirty_background_ratio=5-10,控制脏页刷新频率)。根据服务器资源调整核心参数,平衡性能与稳定性:
innodb_buffer_pool_size设置为物理内存的50%-80%(如64GB内存可设为32-51GB),用于缓存数据和索引,减少磁盘IO;max_connections根据并发用户数设置(如1000-2000),避免连接耗尽;thread_cache_size设置为64-256,减少线程创建开销;innodb_log_file_size设置为256M-512M(平衡性能与数据安全性),innodb_log_buffer_size设置为8M-64M(提高日志写入效率);query_cache_size(MySQL 5.7后已弃用,仅在特定场景使用)、innodb_flush_log_at_trx_commit(主库设为1保证数据安全,从库可设为2提高性能)。优化查询逻辑是提升性能的关键:
user_id),使用SELECT column1, column2替代SELECT *,减少数据传输量;SELECT o.order_id, c.customer_name FROM orders o JOIN customers c ON o.customer_id = c.customer_id),减少查询次数;EXPLAIN命令查看查询执行计划,识别全表扫描、索引未使用等问题;OFFSET大数据量分页(如LIMIT 10000, 10),改用WHERE id > last_id LIMIT 10(基于上一页最后一条记录的ID查询)。合理的表结构设计减少数据冗余和IO压力:
INT代替BIGINT、VARCHAR(50)代替TEXT),减少存储空间;OPTIMIZE TABLE命令整理表碎片(针对InnoDB表),恢复存储空间并提升查询速度。索引是加速查询的核心,但过度索引会增加写开销:
CREATE INDEX idx_age_gender ON users(age, gender)),遵循最左前缀原则(查询条件需包含索引左侧列);WHERE YEAR(create_time) = 2025)、函数操作(如WHERE LOWER(username) = 'admin'),防止索引失效。使用外部缓存减少数据库直接访问:
持续监控和定期维护保障数据库稳定:
slow_query_log=1),使用pt-query-digest工具分析慢查询,定位性能瓶颈;OPTIMIZE TABLE整理碎片,每月分析慢查询日志并优化查询语句,每季度审查索引使用情况。