优化MariaDB查询速度需从索引、查询语句、配置参数、硬件、维护等多维度综合调整,以下是具体方法:
WHERE、JOIN、ORDER BY、GROUP BY的列创建索引(如高频查询的user_id、order_date列),优先选择高选择性列(唯一值多的列,如身份证号比性别更适合建索引)。WHERE category_id=1 AND publish_date>='2025-01-01'),创建复合索引(如INDEX idx_cat_date (category_id, publish_date)),注意最左前缀原则(查询条件需包含复合索引的最左列才能生效)。INSERT、UPDATE、DELETE)的开销,并占用更多磁盘空间,定期清理未使用的索引。YEAR(created_at)=2025)、运算(如price*1.1>100)或左模糊查询(如LIKE '%admin'),应将条件改为索引友好的形式(如created_at>='2025-01-01' AND created_at<'2026-01-01'、price>100/1.1、LIKE 'admin%')。EXPLAIN关键字(如EXPLAIN SELECT * FROM users WHERE user_id=1),查看type(访问类型,优先选const、eq_ref、range)、key(使用的索引)、rows(扫描行数)等字段,识别全表扫描、索引未使用等问题。SELECT name, email FROM users),减少数据传输量和内存占用。ON a.user_id=b.user_id中的user_id列),确保关联字段类型一致(如均为INT),避免笛卡尔积;优先使用INNER JOIN代替子查询(如SELECT * FROM orders WHERE user_id IN (SELECT user_id FROM users WHERE status=1)可改为SELECT o.* FROM orders o JOIN users u ON o.user_id=u.user_id WHERE u.status=1)。LIMIT offset, size(如LIMIT 0, 10获取前10条),避免一次性返回过多数据。编辑MariaDB配置文件(Ubuntu路径为/etc/mysql/mariadb.conf.d/50-server.cnf),调整以下关键参数:
thread_cache_size(如设置为16-32),缓存空闲线程,减少线程创建开销。innodb_buffer_pool_size可设置越大,缓存的数据和索引越多,减少磁盘访问次数。innodb_thread_concurrency设置为CPU核心数的1-2倍)。OPTIMIZE TABLE命令(如OPTIMIZE TABLE large_table),整理表碎片,减少数据存储空间,提高查询效率(适用于频繁更新的表)。binlog,可通过expire_logs_days参数设置保留天数)和慢查询日志(slow_query_log,定期归档),释放磁盘空间。ANALYZE TABLE命令(如ANALYZE TABLE users)更新统计信息,确保优化器选择最优执行计划。apc、Java的Ehcache),避免重复查询。slow_query_log=1,slow_query_log_file=/var/log/mysql/slow-queries.log,long_query_time=2),使用pt-query-digest工具分析慢查询,定位性能差的SQL语句并优化。以上方法需根据实际业务场景(如读多写少、高并发)和硬件配置调整,优化后需通过压力测试(如sysbench)验证效果。