perf(finance): 管道增量索引与异常批量入队
生产副本 42 万单压测发现: - carrier_missing 查询在 26 万条上 15s 超时 → 改 anti-join,异常去重改批量 - 缺成本异常逐条 3 条 SQL,12 万人工单会跑几十分钟 → 按 scope 批量入队 - 新增 117/118 部分索引,成本快照/人工挂配置/载体检查走 id 顺序扫描 - 人工挂配置查询改为按配置 SKU 数组过滤,避免全量人工单排序
This commit is contained in:
@@ -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';
|
||||
Reference in New Issue
Block a user