(Oracle)在主表上添加过滤器是否可以改善主从之间的左联接条件性能?

时间:2019-01-04 08:50:39

标签: sql oracle

我想知道是否在左联接子句中添加条件以过滤主表上的记录,从而提高主从表之间的左联接性能。

例如 我有一个主表MT(ID,TYPE)和一个明细表DT(ID,FK,NAME),左联接将写为:

select MT.ID, DT.NAME
from MT left join
     DT
     on MT.ID = DT.FK

如果在左联接的结果之间,我只需要有关某种类型记录的信息,比如说MT.TYPE = '01',那么在左联接子句中添加此条件是否可以提高查询的性能?

select MT.ID, DT.NAME
from MT left join
     DT
     on MT.TYPE = '01' and MT.ID = DT.FK

1 个答案:

答案 0 :(得分:1)

如果在MTDT表上没有设置索引,则通常两个查询都将使用全表扫描执行,并且两个查询的性能都相似。第二个查询的评估可能比第一个查询更快的情况是,您已设置了适当的索引,例如

(TYPE, ID) on the MT table
(FK, NAME) on the DT table

在这种情况下,如果MT.TYPE = '01'有严格的限制,则可以大大减少数据库必须要做的工作量。同样,这组索引将加快联接操作。