in原理:in()语句只会执行一次,它会查出子查询中所有符合条件的数据并且缓存起来。之后,对于外查询的每一条数据都会遍历子查询的所有记录。
例如,当外查询记录有100条,子查询记录有1000条,那么就会遍历100*1000条,效率很差。
exists原理:对于外查询的每一条记录都放入子查询中进行比较。
例如,当外查询有1000条时,exists会执行1000次。
in()是在内存里遍历,exists()需要查询数据库,我们都知道查询数据库所消耗的性能更高,而内存比较很快。
外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
网友评论