SQL中in与exists的区别与用法
SQL中in与exists的区别与用法
1.简介
SQL中in与exists都可以用来查找表中,某个数据是否满足存在的条件。它们的功能都是一样的,但是合理的使用in和exists,会让SQL的查找速度快上很多。这里先上结论:当主表数据较大,副表数据较少时,使用in效率较高;当主表数据较少,副表数据较大时,使用exists效率高。
2.实验
先看实际项目中的两段SQL语句,分别是in和exists.
in
exists
现在开始查询人员的授权状况,主表是人员表,共有3368条人员信息的记录,副表是授权表,有94090条授权记录。一条人员信息在授权表里可能多多条对应关系。
in 已授权人员
not in 未授权人员
exists 已授权人员
not exists 未授权人员
3.实验结果
可以看出,查找授权人员时,in和exists的花费时间都差不多,但是查找未授权人员信息时,仅仅9条数据,in方法耗费了34s的时间,而not exists仅仅耗费了218ms。这个差距可以说是非常明显了,并且会随着两表的数据增加而继续拉大差距。
对,你没有看错,可能和业务逻辑也有关系,但是差距真的就是这么大…