Tsql: каков наилучший способ получить некоторые записи с определенными критериями? - PullRequest
0 голосов
/ 16 ноября 2011

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

1 Ответ

0 голосов
/ 13 декабря 2011

Глядя на ваш запрос, я вижу соединение между Cars и CarSteps, я вижу, как вы присоединяетесь к trace.CarId и trace.StepId is. трассировка не определена в вашем запросе.

from      
 Cars cr WITH (NOLOCK) inner join 
 CarSteps steps WITH (NOLOCK) on 
  cr.Id = trace.CarId and    
  cr.LastStepId=trace.StepId

Возможно, я смогу помочь, если я лучше пойму весь запрос. Что показывает план выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...