首页 > 数据库技术 > 详细

SQL中IN与EXISTS关键字

时间:2020-05-14 23:43:00      阅读:87      评论:0      收藏:0      [点我收藏+]

  偶遇这样一个场景,使用IN关键字进行检索数据所消耗的时间是使用EXISTS关键字进行检索数据所消耗的时间的接近30倍。一看差距这么大,查阅了一本SQL数据,其中也没有介绍多少,不过我们可以从其定义中可以领悟到一些差异。

  (1)IN关键字:该操作符IN用于把一个值与一个指定列表进行比较,当被比较的值至少与列表中的一个值相匹配时,它会返回TRUE。

  (2)EXISTS关键字:该操作符EXISTS用于搜索指定表里是否存在满足特定条件的记录。

  根据这两个关键字作用的描述,可知:若是IN子句或者EXISTS子句都是采用SELECT语法检索出来的结果列表进行匹配的话,那么在IN子句中还要将被比较值与结果列表做进一步的循环比较,当IN中的被比较值能够匹配到结果列表中某个值,那么IN子句就会返回TRUE,否则的话就会返回FALSE;而在EXISTS子句中,若SELECT语句检索的结果值不为空,那么EXISTS子句直接将该结果集返回,若是检索的结果值为空的,那么EXISTS子句就返回空,也就是说EXISTS子句返回的就是SELECT语句返回的结果集,不需要再次做比较判断了。

-- IN
SELECT column1
FROM table_name
WHERE some_col IN (SELECT column1 FROM table_name WHERE other_col > xx);


-- EXISTS
SELECT column1
FROM table_name
WHERE EXISTS (SELECT column1 FROM table_name WHERE other_col > xx);

  上述代码示例只是一个象征性的对比说明,在同一个表中进行不同条件的多次检索,使用IN的方式:先根据条件检索出数据,然后some_col与结果列表进行循环比较;使用EXISTS的方式:先根据条件检索出数据,然后将该结果集直接返回,作为最终的数据结果了。由此可见,IN和EXISTS子句耗时不在于SELECT检索的时间,而是在于其自身所消耗的时间。所以在IN子句中,若动态的结果集数据量比较大的话,还是建议使用EXISTS子句来替换。

SQL中IN与EXISTS关键字

原文:https://www.cnblogs.com/bien94/p/12892184.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!