原SQL,主表有130万数据,JOIN一个16条数据的查询结果,索引完整,执行需要6秒
SELECT
spo.partner_order_id,
t1.parent_trade_id,
t1.trade_id,
t1.operator
FROM
st_pay_order spo
JOIN (
SELECT
otr.trade_id,
otr.parent_trade_id,
otr.operator
FROM
st_biz_account_flow af
JOIN st_order_trade_relation otr ON af.linked_trade_id = otr.trade_id
WHERE
af.update_time >= '2023-09-15 16:00:01'
AND af.update_time < '2023-09-15 16:05:01'
AND af.dr = 0
AND af.biz_account_type = 'CISTERN'
) t1 ON spo.store_order_id = t1.parent_trade_id
where spo.`status` = 'S'
修改为查询结果(小表)JOIN130万数据的大表,执行只需要20毫秒,优化成功!
SELECT
spo.partner_order_id,
t1.parent_trade_id,
t1.trade_id,
t1.operator FROM (
SELECT
otr.trade_id,
otr.parent_trade_id,
otr.operator
FROM
st_biz_account_flow af
JOIN st_order_trade_relation otr ON af.linked_trade_id = otr.trade_id
WHERE
af.update_time >= '2023-09-15 16:00:01'
AND af.update_time < '2023-09-15 16:05:01'
AND af.dr = 0
AND af.biz_account_type = 'CISTERN'
) t1 JOIN st_pay_order spo
ON spo.store_order_id = t1.parent_trade_id
AND spo.`status` = 'S'