Ubuntu環境下MariaDB查詢優化技巧
innodb_buffer_pool_size)設置為物理內存的50%-80%(如4GB內存可設為3GB-3.2GB),用于緩存數據和索引。編輯MariaDB配置文件(通常為/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf),調整關鍵參數:
innodb_buffer_pool_size=物理內存的70%(如8GB內存設為5.6GB),這是InnoDB性能的核心參數。innodb_log_file_size=256M-1G,較大的日志文件可減少刷新頻率,提高寫入性能。innodb_flush_log_at_trx_commit=2(平衡性能與安全性,宕機可能丟失1秒數據;若需強一致性則設為1)。tmp_table_size=max_heap_table_size=256M,避免大查詢因臨時表溢出到磁盤。max_connections=300-500(根據應用需求調整,避免過多連接導致資源耗盡)。WHERE、JOIN、ORDER BY子句中頻繁使用的列創建索引(如CREATE INDEX idx_user_id ON users(user_id))。WHERE user_id=1 AND status=1),創建復合索引(CREATE INDEX idx_user_status ON users(user_id, status)),注意索引順序需匹配查詢條件。OPTIMIZE TABLE或ALTER TABLE table_name ENGINE=InnoDB,整理索引碎片,提升查詢效率。EXPLAIN SELECT ...查看查詢計劃,重點關注type(是否為ref、range等高效類型)、rows(掃描行數)、Extra(是否有Using filesort或Using temporary等警告),針對性優化。SELECT name, email FROM users),減少數據傳輸量和內存占用。JOIN(如SELECT u.name FROM users u JOIN orders o ON u.id=o.user_id)比子查詢(如SELECT name FROM users WHERE id IN (SELECT user_id FROM orders))更高效。LIMIT 10000, 10),使用WHERE id > last_id ORDER BY id LIMIT 10(last_id為上一頁最后一條記錄的ID),避免OFFSET的大偏移量掃描。WHERE YEAR(create_time)=2025),這會導致索引失效;減少OR條件(可改用UNION替代)。slow_query_log=1,slow_query_log_file=/var/log/mysql/slow-queries.log,long_query_time=2),定期分析并優化執行時間超過閾值的查詢。ANALYZE TABLE table_name更新表的統計信息,幫助查詢優化器生成更優的執行計劃。mysqldump或mariabackup),確保數據安全,避免因優化操作導致數據丟失。query_cache_size=64M,query_cache_type=1),注意緩存失效對性能的影響。OPTIMIZE TABLE,每季度評估配置參數是否適配當前業務需求。