一、硬件优化:提升基础性能支撑
二、配置文件优化:调整核心参数
编辑MariaDB配置文件(通常位于/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf),重点调整以下关键参数:
1(默认)保证数据安全性(ACID),但性能较低;设为2可提升性能(每秒刷新一次),但可能丢失1秒内的数据;设为0性能最高,但风险最大(崩溃时可能丢失事务)。thread_cache_size(缓存线程数,如16-32)使用,减少线程创建/销毁开销。三、索引优化:加速查询的关键
WHERE、JOIN、ORDER BY的列创建索引(如主键、外键、高频查询字段)。例如:CREATE INDEX idx_user_name ON users(name);。SHOW INDEX或information_schema.STATISTICS)并删除。CREATE INDEX idx_name_age ON users(name, age);),遵循最左前缀原则(查询条件需包含索引左侧列)。VARCHAR(255)),可使用前缀索引减小索引体积(如CREATE INDEX idx_email_prefix ON users(email(10));),但需权衡查询准确性。OPTIMIZE TABLE或ALTER TABLE ... REBUILD INDEX整理索引,提升查询效率。四、查询优化:减少资源消耗
EXPLAIN SELECT ...查看查询执行计划,识别性能瓶颈(如全表扫描、临时表、文件排序)。重点关注type(访问类型,如ALL表示全表扫描)、key(使用的索引)、rows(扫描行数)。SELECT id, name FROM users),减少数据传输量和内存消耗。WHERE YEAR(create_time) = 2025),这会导致索引失效;尽量使用=、IN等高效操作符,避免LIKE '%keyword%'(前导通配符无法使用索引)。JOIN代替子查询(如SELECT a.* FROM table_a a JOIN table_b b ON a.id = b.a_id),子查询会产生临时表,增加资源消耗。LIMIT offset, size(如LIMIT 1000, 20)限制结果集,避免OFFSET过大导致性能下降(可改用WHERE id > last_id LIMIT size优化)。五、定期维护:保持数据库健康
OPTIMIZE TABLE(针对MyISAM或InnoDB碎片化严重的表),重组表数据和索引,减少碎片占用空间。binlog,通过expire_logs_days参数设置保留天数)、慢查询日志(slow_query_log,定期归档或删除),避免日志文件过大占用磁盘空间。ANALYZE TABLE更新表的统计信息,帮助查询优化器选择更优的执行计划(如索引选择)。mysqldump或mariabackup),并测试恢复流程,确保数据安全。六、监控与调优:持续优化性能
SHOW STATUS(查看全局状态变量,如Threads_connected、Queries)、SHOW PROCESSLIST(查看当前执行的查询)、top/htop(查看系统资源使用率)、iostat(查看磁盘I/O)等命令监控数据库状态。slow_query_log = ON,long_query_time = 1(超过1秒的查询视为慢查询)),通过mysqldumpslow或pt-query-digest工具分析慢查询,针对性优化。七、其他优化技巧