mysqlのinサブクエリを解決してインデックスを移動しない

922 ワード

元のsqlは:
SELECT 
    SUM(money)
FROM
    wallet
WHERE
    user_id IN (SELECT DISTINCT
            user_id
        FROM
            user_recharge
        WHERE
            group_id = '6789' AND is_del= 0)
        AND type = 1
        AND state IN (0 , 1)
        AND createtime BETWEEN '2017-12-12 00:11:22' AND '2019-05-02 00:11:22';

実行時間:5.13 s
変更後:
        select sum(bb.money) from
        (SELECT DISTINCT
            user_id
        FROM
            user_recharge
        WHERE
            group_id = '6789' AND is_del= 0) aa inner join wallet bb on aa.user_id= bb.user_id
        AND type= 1
        AND state IN (0 , 1)
        AND createtime BETWEEN '2017-12-12 00:11:22' AND '2019-05-02 00:11:22';

実行時間:0.131 s
理由:explainで以前の実行計画を調べたところ、in文にサブクエリがあるため、実行計画に全表スキャンに役立つことが分かった.だからSQLを修正して、効率は大いに向上しました!