yml2213
2d75be702d
perf(db): 补齐三处"只差索引"的热查询缺口
审计方式:pg_stat_statements 按"每次调用读取块数"排序 + EXPLAIN (ANALYZE, BUFFERS) 复现,
每条都先在线上并发建索引验证有效再固化(生产上索引已存在,IF NOT EXISTS 跳过)。
① 后台订单列表:COALESCE(paid_at, created_at) 同时出现在 WHERE 与 ORDER BY,
函数包裹列非 sargable —— 默认"近 7 天"视角本身就会全表扫 orders 再排序。
实测 26 万行/443MB:Parallel Seq Scan 读 256MB、577ms
→ Index Scan 读 0.3MB、2.05ms(约 280 倍)。
② 重跑快手补单:NOT EXISTS 打在 work_orders.order_id 上,而该列此前**没有索引**,
反连接只能 Hash Anti Join —— 为几十个候选 id 顺序扫完 500MB 宽表,LIMIT 100 拦不住。
实测 188MB、120ms → Index Only Scan 1.2ms(约 100 倍)。同时补 orders(order_status)。
③ 快手凭证"同步源"列表的 (oid, updated_at DESC, id DESC):29.6 万行/678MB,实测 568MB、5.5 秒。
仅建索引不足以改变计划(查询写法要求先物化全部 oid,见审计报告),但它是后续
改写查询的前提,先建好避免再等一次大表建索引。
验证:后端 534 项单测全绿(新增 1 项守卫)。
2026-10-01 13:48:05 +08:00
..
2026-09-15 11:28:40 +08:00
2026-08-22 14:39:46 +08:00
2026-09-12 16:44:59 +08:00
2026-08-28 21:36:54 +08:00
2026-09-15 20:03:11 +08:00
2026-08-21 17:31:39 +08:00
2026-08-23 16:04:10 +08:00
2026-08-21 17:32:58 +08:00
2026-09-15 20:03:11 +08:00
2026-09-01 14:13:10 +08:00
2026-08-21 17:17:06 +08:00
2026-10-01 13:02:09 +08:00
2026-08-21 17:17:06 +08:00
2026-08-21 17:12:46 +08:00
2026-08-23 18:19:47 +08:00
2026-09-13 14:25:51 +08:00
2026-09-12 16:01:26 +08:00
2026-09-21 14:23:00 +08:00
2026-08-28 22:22:26 +08:00
2026-08-21 17:06:25 +08:00
2026-09-02 14:32:26 +08:00
2026-08-22 09:48:09 +08:00
2026-09-12 20:16:27 +08:00
2026-09-21 14:23:00 +08:00
2026-09-13 20:44:35 +08:00
2026-09-18 19:36:17 +08:00
2026-09-21 11:35:38 +08:00
2026-09-17 11:52:40 +08:00
2026-09-19 10:41:15 +08:00
2026-10-01 12:17:00 +08:00
2026-09-17 12:20:23 +08:00
2026-10-01 11:07:28 +08:00
2026-10-01 11:07:28 +08:00
2026-09-17 13:34:39 +08:00
2026-09-17 10:21:38 +08:00
2026-10-01 11:07:28 +08:00
2026-10-01 11:07:28 +08:00
2026-08-28 19:40:49 +08:00
2026-09-15 11:28:40 +08:00
2026-08-21 14:02:30 +08:00
2026-08-16 16:59:02 +08:00
2026-08-18 10:06:01 +08:00
2026-09-12 15:42:43 +08:00
2026-09-15 13:48:30 +08:00
2026-09-21 11:35:38 +08:00
2026-08-21 18:21:04 +08:00
2026-09-17 21:03:20 +08:00
2026-08-21 16:28:16 +08:00
2026-08-21 16:28:16 +08:00
2026-08-21 16:30:55 +08:00
2026-09-15 11:35:24 +08:00
2026-09-17 11:57:33 +08:00
2026-08-20 20:04:43 +08:00
2026-08-30 21:58:13 +08:00
2026-08-30 21:58:13 +08:00
2026-08-21 15:28:20 +08:00
2026-08-21 16:54:07 +08:00
2026-08-21 16:37:16 +08:00
2026-09-21 14:23:00 +08:00
2026-09-21 13:30:33 +08:00
2026-09-13 11:32:42 +08:00
2026-08-22 11:19:49 +08:00
2026-08-28 21:36:54 +08:00
2026-09-12 20:16:27 +08:00
2026-09-12 20:16:27 +08:00
2026-09-13 11:14:16 +08:00
2026-09-21 11:35:38 +08:00
2026-08-30 16:40:09 +08:00
2026-08-30 16:40:09 +08:00
2026-08-30 21:58:13 +08:00
2026-10-01 13:12:42 +08:00
2026-08-21 15:28:20 +08:00
2026-08-21 16:52:32 +08:00
2026-08-21 16:52:32 +08:00
2026-08-30 13:59:01 +08:00
2026-08-21 16:30:55 +08:00
2026-09-20 21:59:29 +08:00
2026-08-20 19:56:10 +08:00
2026-10-01 13:48:05 +08:00
2026-09-12 17:46:47 +08:00
2026-08-21 19:09:23 +08:00
2026-08-21 16:42:04 +08:00
2026-08-22 10:20:10 +08:00
2026-09-13 11:02:10 +08:00
2026-08-30 21:58:13 +08:00
2026-08-21 15:28:20 +08:00
2026-08-21 16:37:16 +08:00
2026-08-21 16:39:57 +08:00
2026-08-21 19:09:23 +08:00