我有一张桌子(汽车)可以保存一些特色汽车,比如EngineNo,LastProductionStepId,NodyNo,......
此外,我还有另一张表(CarSteps),它保存了特定汽车在制造过程中应该通过的所有步骤,如发动机分配(Id = 2),雕刻(3),PrePaint(4),油漆(5), AfterPaint(6),确认(7),交付(8)
我想让PrePaint和Confirmation 之间的所有车辆:
select cr.Id, cr.BodyNo, cr.LastStepId
from Cars cr WITH (NOLOCK)
inner join CarSteps steps WITH (NOLOCK) on cr.Id = trace.CarId and cr.LastStepId=trace.StepId
where
cr.LastStepId >= 4
AND cr.[Status] = 1
AND steps.[Status] = 1
AND not exists ( select *
from CarSteps steps1 WITH (NOLOCK)
where steps1.CarId = cr.Id
AND steps1.StepId >= 7 AND steps1.Status = 1
)
因为CarSteps有很多记录(4400万),所以查询很慢。 你有什么意见?有没有更好的方法来获得这些车?
答案 0 :(得分:0)
查看你的查询我看到从Cars到CarSteps的连接,我看到你加入了trace.CarId和trace.StepId。跟踪未在您的查询中定义。
from
Cars cr WITH (NOLOCK) inner join
CarSteps steps WITH (NOLOCK) on
cr.Id = trace.CarId and
cr.LastStepId=trace.StepId
如果我能更好地理解完全查询,我可以提供帮助。 执行计划揭示了什么?