mysql子查询优化

SELECT COUNT(*) AS tp_count FROM xxx_b2c_orders WHERE pay_status='1' 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 = '1' 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='1' AND bo.area_code IN (1030,1031,1032,1033) AND bo.createtime>1413533130 AND ii.in_member_id IN (14273,13742,14299)

第三种方式join:110ms

 

效果非常明显

你可能感兴趣的:(mysql)