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.