1.查询一个表中id不在另一个表中的记录

select userId, 'true' from user_ where userId not in (select user_id from user_var_data) order by userId;


user_ : 60W+

user_var_data:60W+


肿么办:都知道not in是个大坑,如何优化呢?

可以想象下,通过left join 来说筛选出来差异的结果【inner join 是拿出来相同的结果】

select a.userId,'true' from from user_ a left join user_var_data b on a.user where a.userId = b.user_id where b.user_id is null order by a.userid;


一个执行耗时:7s,一个执行耗时2s.

这是一个很好的尝试,把2个表不同的结果打印出来。



二:in 和 or 

 i>  查询列的字段是否是索引段狠重要


 ii>  因此在给in和or的效率下定义的时候,应该再加上一个条件,就是所在的列是否有索引或者是否是主键。如果有索引或者主键性能没啥差别,如果没有索引,性能差别不是一点点!