我想知道是否在左联接子句中添加条件以过滤主表上的记录,从而提高主从表之间的左联接性能。
例如 我有一个主表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
答案 0 :(得分:1)
如果在MT
和DT
表上没有设置索引,则通常两个查询都将使用全表扫描执行,并且两个查询的性能都相似。第二个查询的评估可能比第一个查询更快的情况是,您已设置了适当的索引,例如
(TYPE, ID) on the MT table
(FK, NAME) on the DT table
在这种情况下,如果MT.TYPE = '01'
有严格的限制,则可以大大减少数据库必须要做的工作量。同样,这组索引将加快联接操作。