Tsql:使用特定条件检索某些记录的最佳方法是什么?

时间:2011-11-16 07:14:39

标签: performance tsql execution-time

我有一张桌子(汽车)可以保存一些特色汽车,比如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万),所以查询很慢。 你有什么意见?有没有更好的方法来获得这些车?

1 个答案:

答案 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

如果我能更好地理解完全查询,我可以提供帮助。 执行计划揭示了什么?