perf(finance): 管道增量索引与异常批量入队

生产副本 42 万单压测发现:
- carrier_missing 查询在 26 万条上 15s 超时 → 改 anti-join,异常去重改批量
- 缺成本异常逐条 3 条 SQL,12 万人工单会跑几十分钟 → 按 scope 批量入队
- 新增 117/118 部分索引,成本快照/人工挂配置/载体检查走 id 顺序扫描
- 人工挂配置查询改为按配置 SKU 数组过滤,避免全量人工单排序
This commit is contained in:
yml2213
2026-11-01 16:22:52 +08:00
parent 5d7904f6ee
commit 8391912bda
5 changed files with 184 additions and 29 deletions
@@ -0,0 +1,33 @@
-- 117_fulfillment_pipeline_indexes.sql
--
-- 财务管道按订单项 id 增量扫描时的专用部分索引。
-- 42 万行实测:carrier_dispatch 的「人工配置待挂载」查询原本 10.9s(扫描 12 万人工单),
-- 加上按 id 的部分索引后可走索引顺序扫描并提前 LIMIT 结束。
-- carrier_dispatch:人工渠道待挂配置
CREATE INDEX IF NOT EXISTS idx_order_items_manual_pending_config_id
ON order_items (id)
WHERE fulfillment_status = 'assigned'
AND fulfillment_channel = 'manual'
AND fulfillment_config_id IS NULL;
-- carrier_dispatch:已配置但未确认履约(人工成本未记录)
CREATE INDEX IF NOT EXISTS idx_order_items_manual_configured_id
ON order_items (id)
WHERE fulfillment_status = 'assigned'
AND fulfillment_channel = 'manual'
AND fulfillment_config_id IS NOT NULL;
-- carrier_dispatch:自动发货/接单平台缺少履约载体
CREATE INDEX IF NOT EXISTS idx_order_items_carrier_check_id
ON order_items (id)
WHERE fulfillment_status = 'assigned'
AND fulfillment_channel IN ('affiliate_dash', 'work_order');
-- cost_snapshot:按 id 顺序扫描需要核算成本的订单项
CREATE INDEX IF NOT EXISTS idx_order_items_cost_ready_id
ON order_items (id)
WHERE fulfillment_status = 'assigned'
AND fulfillment_channel IN (
'affiliate_dash', 'third_party_voucher', 'work_order', 'manual'
);
@@ -0,0 +1,9 @@
-- 118_order_items_manual_sku_index.sql
--
-- carrier_dispatch 按「人工 SKU 配置」反查订单项时,先按 manual_sku_key 命中再按 id 排序;
-- 42 万行实测原查询 3.3s,补 (manual_sku_key, id) 部分索引后可走位图索引 + 小结果集排序。
CREATE INDEX IF NOT EXISTS idx_order_items_manual_sku_key_id
ON order_items (manual_sku_key, id)
WHERE fulfillment_status = 'assigned'
AND fulfillment_channel = 'manual';