yml2213
fbdef6ecab
perf(worker): 「仅问题单」检索短路,从 pending 表反查而非枚举可见集
问题单页签原先走完整派生表达式:为该打手枚举全部可见单并逐行求值
嵌套 CASE + pending EXISTS(重打手 8,586 单 × 逐行探测 ≈ 233MB 缓冲读),
而问题单结果通常为空——生产实测 worker_order_cancel_requests 与
worker_order_feedbacks 的 pending 行数当前均为 0。
短路形状:
wo.status = 'problem'
OR (基础状态 = 'in_progress' AND wo.id IN (两张 pending 表反查))
- 左臂必须写成 sargable 的 wo.status = 'problem':基础状态等于 'problem'
当且仅当 wo.status = 'problem'(派生分支没有 problem 映射);
- 反查走迁移 058 的两张 pending 专用索引,实测 8 个块;
- 仅当请求状态"只含 problem"时短路,混合状态仍走完整表达式(结果集完整性);
- 顺带把 workerOrderStatusExpression 拆出 workerOrderBaseStatusExpression 复用。
生产 EXPLAIN(worker=7):29,851 块 / 267ms → 13,387 块 / 118ms。