Php 如何修改我的SQL以加快它的速度?

Php 如何修改我的SQL以加快它的速度?,php,mysql,Php,Mysql,旧sql是这样的 SELECT COUNT(*) AS tp_count FROM sdb_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 sdb_invite_invite

旧sql是这样的

SELECT COUNT(*) AS tp_count 
FROM sdb_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 sdb_invite_invite 
            where in_member_id=14273 
                or in_member_id=13742 
                or in_member_id=14299
    ) 
LIMIT 1;
结果是22

但它是缓慢的,我想修改它,使它更快。新sql如下所示:

SELECT COUNT(*) AS tp_count 
    FROM sdb_b2c_orders AS bo 
        INNER JOIN sdb_invite_invite AS ii ON bo.member_id=ii.in_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)
但结果是131…为什么?

我建议您改用exists:

您还可以使用索引提高性能。我会推荐sdb_b2c_orderspay_状态、createtime、区号、会员id和sdb_邀请会员id、in_会员id

选择COUNT*作为tp\u计数 来自sdb_b2c_订单作为bo 内部加入sdb_invite_invite AS ii ON bo.member_id=ii.in_member_id bo.pay_status='1'在哪里 以及1030103110321033中的bo.area_代码 和bo.createtime>1413533130 以及142731374214299中的ii.in_成员id

修正了bo.memeber\u id=ii.in\u member\u id到bo.member\u id=ii.member\u id的错误


那就行了

谢谢!你的帮助是对的。但是如何使用联接来实现呢?如果这样可以提高性能,为什么需要使用显式联接呢?join200ms比现有的1600ms快——ps:inwhere2000ms@walter . . . 这就是我描述的索引。
SELECT COUNT(*) AS tp_count
FROM sdb_b2c_orders o
WHERE pay_status = '1' and createtime > 1413533130 and area_code in (1030,1031,1032,1033) and
      exists (select 1
              from sdb_invite_invite i
              where i.member_id = o.member_id and i.in_member_id in (14273, 13742, 14299) 
             );