最有效的SQL语句:Exists vs IN

时间:2016-11-17 12:19:13

标签: sql performance exists

我需要JOIN三个表才能从两列获取值。 这些列是GRN_STATUSSTATUS我已经编写了一些能够获得所需结果的SQL,但我已经被告知使用IN非常低效且我应该使用{{1相反。

我只是想知道在我的情况下这是真的吗?使用EXISTS代替EXISTS的解决方案会是什么样的?

SQL:

IN

1 个答案:

答案 0 :(得分:1)

通常,它取决于DBMS中的实现。

EXISTS主要停止并在第一场比赛时返回,因此它可以更有效率,但是当你有一个常量列表时没有任何意义。

由于SQL是一种声明性语言,因此您无法告诉DBMS 如何,只需告诉DBMS。您描述了预期的结果,服务器可以尝试找到最有效的方式来满足您的请求。

DBMS找到有效算法的方式基于几个方面,包括数据的数量和分布,实际统计数据,所需的预期资源等。

所以EXISTS可能在一张大桌子上表现更好,而对较小的桌子没有影响(或反之亦然)。

您最好的选择是实际检查估算的查询计划或试用它们。

我个人的观点是在不需要数据时使用EXISTS,在需要数据时使用JOIN。 IN用于常量列表。