避免对子查询进行完全扫描

时间:2017-03-20 23:53:23

标签: sql query-optimization

我在添加存在条件之前有一个查询。添加存在条件后,它将永远进入循环而不会返回任何结果。我认为主要原因是每行记录的完整扫描。谁能告诉我们如何避免这种情况。下面的查询是我想要实现的一个例子。

基本上条件是汽车可以有很多零件,如果任何一个零件更新了该车的更改,我们想要拿起所有零件。该部分有详细信息表,我想查看详细信息表的更新。

select c.id, p.id
from car c join part p on p.car_id=c.id
where exists ( 
    select 1 
    from part p join pdetl pd on p.id=pd.part_id 
    where p.car_id=c.id and pd.updated_on > ?
)

1 个答案:

答案 0 :(得分:0)

已编辑:已修改查询以获取与已更新部件的汽车相关联的所有部件。

内部查询获取已更新的部分。外部查询然后拉出与汽车相关的所有零件:

select c.id, p.id
from car c join part p on p.car_id=c.id
where c.id in
(
  select c.id
  from car c join part p on p.car_id=c.id
  where exists ( 
                 select 1 
                 from pdetl pd 
                 where p.id=pd.part_id 
                   and pd.updated_on > ?
                )
)