SQL in与exists查询的区别

mysql中 使用IN和EXISTS查询的区别

先来简单看看两个查询

IN:

   等价于:1、SELECT SNO FROM STUDENT WHERE SSEX IN('男')    ----->先执行in中的查询

              2、SELECT SNO,CNO,GRADE FROM SC WHERE SC.SNO = STUDENT.SNO;

以上in()中的查询只执行一次,它查询出STUDENT中的所有的SNO并缓存起来,然后检查SC表中查询出的SNO在缓存中是否存在,如果存在则将SC的查询数据加入到结果集中,直到遍历SC表中所有的结果集为止。

EXISTS:

先执行外面的SQL语句,即SELECT SNO,CNO,GRADE FROM SC; 将所有行查出保存到缓存中

然后将缓存中的每一行都输入EXISTS语句中去进行运算,如果满足就打印出那一行。

总结:

mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。
 

如果查询的两个表大小相当,那么用in和exists差别不大。 

如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:

发布了22 篇原创文章 · 获赞 28 · 访问量 2651

猜你喜欢

转载自blog.csdn.net/qq_43561507/article/details/104916040