0
我有一個表(汽車),從而節省一些特性的汽車像EngineNo,LastProductionStepId,NodyNo,...Tsql:用特定條件檢索某些記錄的最佳方法是什麼?
再說,我有另一個表(CarSteps)從而節省了所有步驟,一個特定的汽車應當在其生產過程中經過(Id = 2),雕刻(3),PrePaint(4),油漆(5),AfterPaint(6),確認(7),交貨(8)
我希望所有汽車這是預製和確認之間目前:
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百萬),查詢速度很慢。 您的意見是什麼?有沒有更好的方法來獲得這些汽車?
您可以使用內部聯接測試「完成」步驟,但使用子查詢測試「未來步驟」。你有沒有嘗試做兩個測試作爲子查詢(它應該能夠使用CarSteps表索引更快的搜索)?此外,我建議在SQL Server Management Studio中使用查詢分析器來確定查詢的哪個部分最有效。 –
你不能使用'cr.LastStepId在4和7'之間嗎?如果您在LastStepId中擁有當前的StepId,則無需查看「CarSteps」。 –
需要在汽車上看到PK。我的直覺是,你不是在第三種正常形式,這是造成問題。看起來你正試圖在同一張表中使用汽車表格軌跡歷史和當前狀態,這並不好。歷史是多值的,當前狀態是單值。 – Paparazzi