Sql 左连接需要很长时间

Sql 左连接需要很长时间,sql,Sql,我有两张桌子(ProdOrders和PrecalTime) 现在我想检查是否所有的ProdOrders都有相关的预计算时间 每个ProdOrder都有一个图纸编号,并且每个预制时间都基于此图纸编号 因此,我提出了以下问题: select Distinct PO.TEKNR from ProdOrders PO left join PreCalcTime PCT on PO.drawingnr = PCT.Drawingnr where V.Time is NULL 此查询非常有效,但需要很长时

我有两张桌子(ProdOrders和PrecalTime) 现在我想检查是否所有的ProdOrders都有相关的预计算时间 每个ProdOrder都有一个图纸编号,并且每个预制时间都基于此图纸编号 因此,我提出了以下问题:

select Distinct PO.TEKNR from ProdOrders PO
left join PreCalcTime PCT on PO.drawingnr = PCT.Drawingnr
where V.Time is NULL
此查询非常有效,但需要很长时间才能处理约15000个生产订单(具有约550个不同的绘图编号)

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


期待您的想法

我假设
V.Time
是一个bug,您只想在
precaltime
中找到没有
Drawingnr
ProdOrders
。使用
不存在
这是许多数据库系统(,)中最有效的方法


此解决方案中可能不需要distinct,因为连接不存在。

我现在发现了另一种可能性。 如果只使用ProdOrder表中的distincted DrawingNumber,则可以节省大量查找。基于此,我在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

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

V.Time
V
是什么?您使用的是哪种DBMS?您可以通过删除
DISTINCT
和添加
groupby PO.TEKNR
来加快速度。无论如何,
PO.drawingnr
PCT.drawingnr
都被索引了吗?@Mike:用
group by
替换
distinct
不会对任何现代优化器产生影响。为什么要使用外部连接?如果您只需要
prodorders
中的(不同的)行,则子查询(在
中使用
存在
)是一个更好的选择是的。V.Time是一个bug。感谢您的解决方案,它已经快多了
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