运维
运维相关知识和内容
MySQL慢查询优化实战:通过Explain分析提升性能
一、慢查询分析基础
1.1 开启慢查询日志
SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1;
1.2 使用Explain分析
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
输出字段说明:
| 字段 | 含义 |
|---|---|
| type | 连接类型(const > eq_ref > ref > range > index > ALL) |
| possible_keys | 可用的索引 |
| key | 实际使用的索引 |
| rows | 扫描行数 |
二、常见性能问题与优化
2.1 全表扫描优化
-- 错误:使用YEAR函数导致索引失效 SELECT * FROM orders WHERE YEAR(create_time) = 2026; -- 正确:使用范围查询 SELECT * FROM orders WHERE create_time >= '2026-01-01' AND create_time < '2027-01-01';
2.2 联合索引优化
-- 创建联合索引 ALTER TABLE orders ADD INDEX idx_user_status (user_id, status, create_time); -- 最左前缀原则:有效 SELECT * FROM orders WHERE user_id = 1;
三、实战案例
3.1 订单分页查询优化
原始SQL(慢):
SELECT * FROM orders ORDER BY create_time DESC LIMIT 1000000, 10;
优化方案:游标分页
SELECT * FROM orders WHERE id < 1000000 ORDER BY id DESC LIMIT 10;
3.2 批量插入优化
-- 批量插入
INSERT INTO users (name, email) VALUES ('a', 'a@test.com'), ('b', 'b@test.com'), ('c', 'c@test.com');