反馈人:李冠
仓库慢SQL,由于使用函数DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -12 MONTH)造成索引idx_addTime_isStockOrder不命中
慢SQL为:
select a.order_code,b.id as orderListId,b.lock_num,b.pending_move_number,b.put_in_num from t_stk_order_info a join t_stk_order_list b on b.order_code=a.order_code and b.customer_id=a.customer_id where a.add_time >= DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -12 MONTH) AND a.order_state IN (0,1) AND a.order_status=0 AND a.is_stock_order = 1 AND b.purchase_type < 2 AND b.lock_num > 0 AND (b.product_num + IFNULL(b.product_num_update,0))>0 AND b.lock_num-b.put_in_num>0 and not exists( select 1 from rb_waitingmoving_orderdetail where order_code=a.order_code and customer_id=a.customer_id and IFNULL(waiting_move_state,0)=0 );
解决方案:DATE_ADD(CURRENT_TIMESTAMP,INTERVAL -12 MONTH) 这个时间调整为代码中生成,直接以参数方式传入,如:
SELECT
a.order_code,
b.id AS orderListId,
b.lock_num,
b.pending_move_number,
b.put_in_num
FROM
t_stk_order_info a
JOIN t_stk_order_list b ON b.order_code = a.order_code
AND b.customer_id = a.customer_id
WHERE
a.add_time >= 2025-10-15 05:28:00
AND a.order_state IN (0, 1)
AND a.order_status = 0
AND a.is_stock_order = 1
AND b.purchase_type < 2
AND b.lock_num > 0
AND (b.product_num + IFNULL(b.product_num_update, 0)) > 0
AND b.lock_num - b.put_in_num > 0
AND NOT EXISTS (SELECT 1 FROM rb_waitingmoving_orderdetail WHERE order_code = a.order_code AND customer_id = a.customer_id AND IFNULL(waiting_move_state, 0) = 0);
其他类似的SQL,建议一样优化,以及在团队中强调,避免再次出现类似的性能SQL
处理涉及功能:
1、移库任务自动生成服务
2、移库任务手动生成
处理后的结果:
可正常生成移库任务
1、移库任务自动生成服务
2、移库任务手动生成