索引是加速查询的核心手段,需合理设计与管理:
WHERE、JOIN、ORDER BY的字段建立索引(如user_id、order_date),避免全表扫描。age和gender筛选),创建复合索引(CREATE INDEX idx_age_gender ON users(age, gender)),注意索引顺序需匹配查询条件。INSERT、UPDATE操作的开销,定期清理未使用的索引。WHERE YEAR(create_time) = 2025),这会导致索引失效。优化查询语句本身是提升性能的基础:
SELECT *:只查询需要的字段(如SELECT user_id, username FROM users),减少数据传输量。LIMIT:分页查询时用LIMIT限制返回行数(如SELECT * FROM users WHERE age > 25 LIMIT 10),避免一次性加载大量数据。JOIN操作:尽量用JOIN替代子查询(如SELECT o.order_id, c.customer_name FROM orders o JOIN customers c ON o.customer_id = c.customer_id),并确保JOIN字段有索引。EXPLAIN分析查询:通过EXPLAIN命令查看执行计划,识别全表扫描、索引未使用等问题(如EXPLAIN SELECT * FROM users WHERE age > 25)。良好的表结构设计能从根本上提升查询效率:
TINYINT替代INT表示状态,用VARCHAR(50)替代TEXT存储短文本),减少存储空间和I/O开销。PARTITION BY RANGE (YEAR(create_time))),提升查询和维护效率。OPTIMIZE TABLE命令整理索引碎片(如OPTIMIZE TABLE orders),适用于频繁更新的表。调整MySQL参数以匹配服务器硬件,最大化性能:
innodb_buffer_pool_size设置为物理内存的60%-80%(如64GB内存设为32GB-51.2GB),用于缓存数据和索引,减少磁盘I/O。max_connections(如1000-2000),避免连接数耗尽;同时调整thread_cache_size(如64-256),减少线程创建开销。innodb_flush_log_at_trx_commit设置为2(牺牲部分数据安全性换取性能,适用于高并发写入场景),并合理设置innodb_log_file_size(如256MB-512MB),平衡性能与恢复能力。利用缓存技术降低数据库负载:
query_cache_type(设为1),但5.7后已弃用,需依赖外部缓存。硬件是性能的基石,需根据需求升级:
innodb_buffer_pool_size。优化操作系统设置,提升MySQL效率:
noatime,减少文件访问时间更新)。vm.swappiness设置为0-10(减少内存交换),vm.dirty_background_ratio设置为5-10(控制脏页刷新频率),优化磁盘I/O性能。net.core.rmem_max=16777216),优化网络传输效率。定期分析慢查询,定位性能瓶颈:
slow_query_log=1和long_query_time=1(记录执行时间超过1秒的查询),收集慢查询语句。pt-query-digest或mysqldumpslow分析慢查询日志,找出高频慢查询(如未使用索引的查询),针对性优化。