我需要JOIN
三个表才能从两列获取值。
这些列是GRN_STATUS
和STATUS
我已经编写了一些能够获得所需结果的SQL,但我已经被告知使用IN
非常低效且我应该使用{{1相反。
我只是想知道在我的情况下这是真的吗?使用EXISTS
代替EXISTS
的解决方案会是什么样的?
SQL:
IN
答案 0 :(得分:1)
通常,它取决于DBMS中的实现。
EXISTS主要停止并在第一场比赛时返回,因此它可以更有效率,但是当你有一个常量列表时没有任何意义。
由于SQL是一种声明性语言,因此您无法告诉DBMS 如何,只需告诉DBMS。您描述了预期的结果,服务器可以尝试找到最有效的方式来满足您的请求。
DBMS找到有效算法的方式基于几个方面,包括数据的数量和分布,实际统计数据,所需的预期资源等。
所以EXISTS可能在一张大桌子上表现更好,而对较小的桌子没有影响(或反之亦然)。
您最好的选择是实际检查估算的查询计划或试用它们。
我个人的观点是在不需要数据时使用EXISTS,在需要数据时使用JOIN。 IN用于常量列表。