SQL中in与exists的区别与用法

SQL中in与exists的区别与用法

1.简介

    SQL中in与exists都可以用来查找表中,某个数据是否满足存在的条件。它们的功能都是一样的,但是合理的使用in和exists,会让SQL的查找速度快上很多。这里先上结论:当主表数据较大,副表数据较少时,使用in效率较高;当主表数据较少,副表数据较大时,使用exists效率高。
SQL中in与exists的区别与用法

2.实验

    先看实际项目中的两段SQL语句,分别是in和exists.

in

SQL中in与exists的区别与用法

exists

SQL中in与exists的区别与用法

    现在开始查询人员的授权状况,主表是人员表,共有3368条人员信息的记录,副表是授权表,有94090条授权记录。一条人员信息在授权表里可能多多条对应关系。

in 已授权人员

SQL中in与exists的区别与用法

not in 未授权人员

SQL中in与exists的区别与用法

exists 已授权人员

SQL中in与exists的区别与用法

not exists 未授权人员

SQL中in与exists的区别与用法

3.实验结果

    可以看出,查找授权人员时,in和exists的花费时间都差不多,但是查找未授权人员信息时,仅仅9条数据,in方法耗费了34s的时间,而not exists仅仅耗费了218ms。这个差距可以说是非常明显了,并且会随着两表的数据增加而继续拉大差距。

SQL中in与exists的区别与用法
    对,你没有看错,可能和业务逻辑也有关系,但是差距真的就是这么大…