简体   繁体   English

如何修改SQL以加快速度?

[英]How can I modify my SQL to speed it up?

The old sql is like this 旧的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;

It is result is 22 结果是22

But it is slow and I want to modify it to make it faster. 但是它很慢,我想对其进行修改以使其更快。 The new sql is like this: 新的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)

But it is result is 131 ...why? 但是结果是131 ...为什么?

I would suggest you use exists instead: 我建议您改用exists

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) 
             );

You can also improve performance with indexes. 您还可以使用索引提高性能。 I would recommend sdb_b2c_orders(pay_status, createtime, area_code, member_id) and sdb_invite_invite(member_id, in_member_id) . 我建议使用sdb_b2c_orders(pay_status, createtime, area_code, member_id)sdb_invite_invite(member_id, in_member_id)

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) 从sdb_b2c_orders中选择COUNT(*)AS tp_count作为bo bo内联接sdb_invite_invite AS ii在bo.member_id = ii.in_member_id的地方bo.pay_status ='1'和bo.area_code IN(1030,1031,1032,1033)和bo.createtime > 1413533130 AND ii.in_member_id IN(14273,13742,14299)

fixed bo.memeber_id=ii.in_member_id to bo.member_id=ii.member_id 固定bo.memeber_id=ii.in_member_idbo.member_id=ii.member_id

Then it works! 然后就可以了!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM