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。这个差距可以说是非常明显了,并且会随着两表的数据增加而继续拉大差距。

对,你没有看错,可能和业务逻辑也有关系,但是差距真的就是这么大…
本文探讨了SQL中in与exists在不同场景下的性能表现,通过实验对比了两者在主副表数据量不同时的查询速度,揭示了合理选择查询方式的重要性。
265

被折叠的 条评论
为什么被折叠?



