数据量从几万增长到几百万后,慢查询通常不是“数据库不行”,而是索引设计与 SQL 写法没有贴合业务访问路径。下面是一次虚拟电商订单表优化记录。
高频接口是“按用户 + 时间范围 + 状态查询订单列表”,高峰期接口平均耗时 420ms,偶发超过 1s。SQL 大致如下:
SELECT id, order_no, amount, status, created_at FROM t_order WHERE user_id = ? AND status = ? AND created_at BETWEEN ? AND ? ORDER BY created_at DESC LIMIT 20;
针对该场景,最终使用联合索引:(user_id, status, created_at)。
range 或更优Using filesort 和 Using temporaryDATE(created_at),导致索引失效优化后平均耗时从 420ms 降到 38ms,P95 从 1.1s 降到 120ms,数据库 CPU 峰值下降约 23%。说明索引策略与访问模式基本匹配。
← 返回首页