mysql子查询优化

时间:2023-03-09 12:51:12
mysql子查询优化
SELECT COUNT(*) AS tp_count FROM xxx_b2c_orders WHERE pay_status='' and createtime>1413533130 and area_code in (1030,1031,1032,1033) and member_id in (select member_id from xxx_invite_invite where in_member_id=14273 or in_member_id=13742 or in_member_id=14299) LIMIT 1

第一种方式in where:2000ms

SELECT COUNT(*) AS tp_count
FROM xxx_b2c_orders o
WHERE pay_status = '' and createtime > 1413533130 and area_code in (1030,1031,1032,1033) and
exists (select 1
from xxx_invite_invite i
where i.member_id = o.member_id and i.in_member_id in (14273, 13742, 14299)
);

第二种方式exists:1600ms

SELECT COUNT(*) AS tp_count FROM xxx_b2c_orders AS bo INNER JOIN xxx_invite_invite AS ii ON bo.member_id=ii.member_id WHERE bo.pay_status='' AND bo.area_code IN (1030,1031,1032,1033) AND bo.createtime>1413533130 AND ii.in_member_id IN (14273,13742,14299)

第三种方式join:110ms

效果非常明显