
一句话承诺:不改业务逻辑,三步加索引与执行计划观察,实现“够用即好”的读性能提升。

字段 | 含义 | 关注点 |
|---|---|---|
type | 访问类型 | ALL为全表,尽量达到 ref/range |
key | 使用索引 | NULL表示未命中索引 |
rows | 估算行数 | 越小越好(评估扫描成本) |
Extra | 额外信息 | Using filesort/temporary 需关注 |
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT,
status TINYINT,
created_at DATETIME,
KEY idx_user_status_created (user_id, status, created_at)
);-- 慢查询(无索引或索引不佳)
SELECT * FROM orders
WHERE user_id = 123 AND status = 1
ORDER BY created_at DESC
LIMIT 20;
-- 优化方式:覆盖索引与顺序
-- 索引顺序与过滤列优先,排序列放末尾
ALTER TABLE orders
ADD INDEX idx_user_status_created (user_id, status, created_at);
-- 观察执行计划
EXPLAIN SELECT * FROM orders
WHERE user_id = 123 AND status = 1
ORDER BY created_at DESC
LIMIT 20;type 从 ALL 变为 range/ref,通常意味着性能显著改善。rows 与 Extra 字段对比,确认是否消除了 filesort/temporary。Redis 缓存“偶尔失效”的三种常见坑与兜底策略(流程图+Key设计)。