左连接需要很长时间

时间:2018-01-19 07:35:14

标签: sql

我有两张桌子(ProdOrders和PreCalcTime) 现在我想检查所有ProdOrders是否都有关联的PreCalcTime 每个ProdOrder都有一个绘图编号,每个PreCalcTime都基于此图纸编号 所以我做了以下查询:

select Distinct PO.TEKNR from ProdOrders PO
left join PreCalcTime PCT on PO.drawingnr = PCT.Drawingnr
where V.Time is NULL

此查询效果非常好,但需要很长时间才能生成大约15000个生产订单(大约有550个生产订单)

当然我可以尝试使用一些过滤进行优化,但是还有其他选项,例如“不在选择中”或其他加速此查询的技术

期待您的想法

2 个答案:

答案 0 :(得分:1)

我认为V.Time是一个错误,您只想找到ProdOrders中没有Drawingnr的{​​{1}}。使用PreCalcTime这是许多数据库系统中最有效的方式(PostgresOracleSQL Server)。

NOT EXISTS

由于JOIN不存在,因此在此解决方案中可能不需要。

答案 1 :(得分:0)

我现在发现了另一种可能性。 如果我只使用ProdOrder表中的不同绘图编号,我会节省大量的查找。基于此,我在from语句中创建了一个子查询。 这样它运行得非常快

select DPO.DrawNr from 
(select distinct PO.drawingnr DrawNr from ProdOrders PO) DPO
left join PreCalcTime PCT on DPO.DrawNr = PCT.drawingnr
where  PCT.Time is NULL

结果是一样的,但现在最大的问题是这是一个正确的方法