php - 如何修改 SQL 来加快速度?

标签 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 
            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代替:

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

您还可以使用索引来提高性能。我会推荐 sdb_b2c_orders(pay_status, createtime, area_code, member_id)sdb_invite_invite(member_id, in_member_id)

关于php - 如何修改 SQL 来加快速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558874/

相关文章:

php - 使用 OOP 从 MySQL 获取数据

php - 一个 MySQL 查询,一些规范化表,问题 w/counts 来自规范化表行(来自 PHP)

php - 如何在 MySQL 表中存储格式化文本?

php - 通知 : Undefined index: args

mysql insert 子句给出#1064 错误

php - 使用 PHP + MySQL 的二叉树

php - 使用PHP将阿拉伯语存储在mysql中将文本转换为u0645u0631u062du0628u0627

android - 在 listView 中反转整个列表

mysql - 如何创建 NOT IN where 子句 Doctrine 查询?

mysql - MySQL 中 PostgreSQL 的 array_agg() 和 array_to_string