MySQL 查询优化完全指南
前言
数据库查询性能是影响应用程序响应速度的关键因素之一。本文将深入探讨 MySQL 查询优化的各种技术和最佳实践。
1. 理解查询执行计划
使用 EXPLAIN 命令是优化查询的第一步:
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
EXPLAIN 输出解读
- type: 连接类型,从好到差依次是:system > const > eq_ref > ref > range > index > ALL
- possible_keys: 可能使用的索引
- key: 实际使用的索引
- rows: 扫描的行数
2. 索引优化
创建合适的索引
-- 单列索引
CREATE INDEX idx_users_email ON users(email);
-- 复合索引
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);
索引设计原则
- 选择性高的列放在前面:选择基数(cardinality)高的列
- 考虑查询模式:根据实际查询创建索引
- 避免过多索引:每个索引都会增加写操作的开销
3. 查询重写技巧
避免 SELECT *
-- 不好
SELECT * FROM users WHERE id = 1;
-- 好
SELECT id, name, email FROM users WHERE id = 1;
使用 LIMIT 限制结果
-- 添加分页
SELECT * FROM articles ORDER BY published_at DESC LIMIT 20 OFFSET 40;
4. 慢查询监控
启用慢查询日志:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
总结
MySQL 优化是一个持续的过程,需要结合监控、分析和实际测试来不断改进。