运维

运维相关知识和内容

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');