У меня есть таблица (Автомобили), которая сохраняет некоторые характеристики автомобиля, такие как 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 имеет много записей (44 миллиона), запрос выполняется медленно.Каково твое мнение?Есть ли лучший способ получить эти автомобили?