exsist 效率比 in高 为什么还有地方到处用in,
如题求解。
简单来说,exsist(存在)和in(有)是两个东西
exsist(存在)的话,只要有,立刻返回
in(有)的话,有,有几个都是什么
也就是说如果一个数据库中包含100个含有“aa”的字段,
用exsist(存在)的话,找到第一个就是true返回了,
但是用in(有)的话要把这100个全部找出来!
也就是说,如果仅仅是判断有没有就用exsist 要是想要知道有多少都是什么就用in
exists语句是对外表作loop循环,每次loop循环再对内表进行查询
如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in
in适合于外表大而内表小的情况;exists适合于外表小而内表大的情况
不能一概而论
1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1< 2) select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。
补充:
in还有固定值的用法 例如 字段 in ('a','b','c') 这种写法exists好像不支持吧
exit只是判断是否存在是boolean值,但你要返回存在的记录exit办不到。好比:有人在吗?和有哪些人在?
应该是应用范围不一样吧,如果你用exists去判断,那么在找到第一个满足条件的数据就会返回。
但是in 会找出所有的
in也有自己的适用条件,如楼上所说