Mysql in statement performance related with its position?

select
    *
from
    (
    select
        event_date,
        '2014-12-06' as active_date,
        channel_id,
        new_user_count as new_user_count,
        1d_retain/new_user_count as 1d_retain_rate
    from
        web_channel_retain
    where
        app_id=-1
    and
        event_date='2014-12-05'
    and
        new_user_count>= 500
    and
        channel_id in (select distinct channel_id from formated_channel_category where type_id=507 )
    )as f
order by 1d_retain_rate desc
limit 0,50;
select
    *
from
    (
    select
        event_date,
        '2014-12-06' as active_date,
        channel_id,
        new_user_count as new_user_count,
        1d_retain/new_user_count as 1d_retain_rate
    from
        web_channel_retain
    where
        channel_id in (select distinct channel_id from formated_channel_category where type_id=507 )
    and
        app_id=-1
    and
        event_date='2014-12-05'
    and
        new_user_count>= 500
        
    )as f
order by 1d_retain_rate desc
limit 0,50;

 The 1st sql runs less than 2 seconds, while 2nd sql runs a long time(I killed it before it completed). The only difference is the position of the in statement. This means mysql executes "where conditions" in the exact order that we write them.

原文地址:https://www.cnblogs.com/linghuaichong/p/4149835.html