mysql的in语句是把外表和内表做hash连接,exists是对外表做loop循环。每次loop循环再对内表进行查询。 如果两个表的大小相当,那么用in还是exists差别不大如果两个表一个大一个小,那么子查询表大的用exists,表小的用in但是如果查询语句用了not in,那么内外表都会进行全表扫描,没有用到索引,而not exists的子查询仍然能用到表上的索引,所以说无论哪个表大,not exist 都比 not in的查询效率要高的。