【发布时间】:2018-01-13 14:50:45
【问题描述】:
我知道,当我们使用 EXISTS 和 NOT EXISTS 代替 IN 和 NOT IN 时,我们的查询性能得到了提高,但是,当我们用 OUTER JOIN 代替 NOT EXISTS 时,性能是否会进一步提高?
例如,以下查询从 PRODUCT 表中选择不在另一个名为 PC 的表中的所有模型。作为记录,PRODUCT 或 PC 表中的模型值都不是空值:
select model
from product
where not exists(
select *
from pc
where product.model = pc.model);
以下 OUTER JOIN 将显示相同的结果:
select product.model
from product left join pc
on pc.model = product.model
where pc.model is null;
鉴于它们都返回相同的值,我们应该使用哪个选项来更好地提高查询性能?
【问题讨论】:
-
两者应该是一样的。 Oracle 有一个很好的优化器,这两种方式都是半反连接的表达方式。
-
“我知道当我们使用 EXISTS 和 NOT EXISTS 代替 IN 和 NOT IN 时,我们的查询性能会得到提高”。在某些情况下。在其他情况下,IN 或 NOT IN 表现更好。性能取决于驱动查询和子查询的相对大小。
标签: oracle outer-join not-exists