mysqlのinサブクエリを解決してインデックスを移動しない
922 ワード
元のsqlは:
実行時間:5.13 s
変更後:
実行時間:0.131 s
理由:explainで以前の実行計画を調べたところ、in文にサブクエリがあるため、実行計画に全表スキャンに役立つことが分かった.だから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を修正して、効率は大いに向上しました!