如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用 in。
反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用 exists。
用in时 大表在前小表在后
就是说使用in时,先把in里面的子查询执行完作为查询条件给外层查询使用,因此他需要小表的查询在in里面 (这种查询又叫不相关子查询)
用 exists时 小表在前大表在后
使用exits时先取得外层查询的一个属性值,然后然后把这个值拿到exits的
子查询里面去执行,执行完毕后再取得外层父查询的下一个值,依次再来重复执行子查询(这种拿值 到exits中去一次 比较 的查询又叫相关子查询)