yml2213
90de6b9419
perf(worker): 单号检索收敛为可走索引的等值/前缀,并支持关联单号反查
问题:后台「按单号检索」在平台单号/工单号分支里 OR 了一支
`work_order_no ILIKE '%'||$n||'%'`。前置通配符非 sargable,任何 B-Tree 都用不上,
整条查询退化成 work_orders 的 Seq Scan。
生产实测(10.3 万行 / 572MB,pg_stat_statements 46 小时窗口):
- 列表查询 + 统计查询用同一份 filters 并行执行,一次检索打两遍全表;
两者合计占全库 66% 的磁盘读(1.1TB/46h),单次读 26,442 个块(约 211MB)、398ms、返回 1 行。
- 收敛后同库同参数:等值 0.19ms,前缀 30ms(约 2000 倍)。
- 真实统计查询端到端 760ms → 61.6ms。
改动:
1. 平台单号/工单号分支收敛为「等值 + 前缀」,与 order-repo / task-repo 既有写法一致;
工单号含随机小写段(10.2 万行里 7.4 万行非全大写),保留 LOWER() 比较。
2. 迁移 090 补 text_pattern_ops 前缀索引:当前库 collation 为 en_US.utf8,
前缀 LIKE 在默认 B-Tree 上会退化成全索引扫(实测 438ms)。
3. 新增关联单号反查分支:SUB/INV/AS/DT 不在 work_orders 上,
经关联表反查工单 id,四条链路均命中唯一索引。
4. 前端 isExplicitOrderNoSearch 同步补齐(否则搜到的单会被状态页签挡掉、
实时补丁还会把行删掉)。
验证:生产 EXPLAIN 逐条比对 + 14 项仓储单测 + 6 项分类器单测。
2026-10-03 14:27:32 +08:00
..
2026-10-03 14:27:32 +08:00
2026-10-02 17:13:59 +08:00
2026-09-17 10:57:57 +08:00
2026-09-17 11:22:59 +08:00
2026-09-21 12:04:30 +08:00
2026-10-01 12:17:00 +08:00
2026-09-16 20:39:52 +08:00
2026-09-17 13:01:59 +08:00
2026-09-21 14:23:00 +08:00
2026-09-21 12:04:30 +08:00
2026-09-13 11:14:16 +08:00
2026-10-01 15:05:38 +08:00
2026-09-16 21:02:50 +08:00
2026-08-21 12:39:24 +08:00
2026-09-21 15:48:23 +08:00
2026-08-30 17:32:34 +08:00
2026-08-21 12:29:19 +08:00
2026-08-20 16:19:44 +08:00
2026-08-28 21:36:54 +08:00
2026-10-01 13:48:05 +08:00
2026-08-16 17:27:12 +08:00