解決mysql中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.13s

修改後爲:

        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.131s

原因:通過explain查看了之前的執行計劃得知,是由於in語句中有子查詢導致的,執行計劃中看到了有用到全表掃描;故將SQL進行了修改,效率大大提升了許多!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章