2010-07-30 3 views
2

SQL Server 2000에서 아래 쿼리를 최적화하려고합니다. 모든 테이블에는 2 백만 레코드가 포함 된 Prod_Lot_Stage_Wise_Detl 테이블을 제외한 300,000 개 이상의 행이 있습니다.select 절에 정수 열을 사용할 때 쿼리 선택 속도가 느려짐

LotStgWs.Finished_Pcs 필드 (Prod_Lot_Stage_Wise_Detl 테이블에 속함)를 포함하지 않고 아래의 쿼리를 실행하면 결과가 20 초 내에 나타납니다.

그러나 LotStgWs.Finished_Pcs 필드를 포함하면 실행 시간이 2 분 이상이됩니다. 여기서 잘못된 점과 SQL Server 2000에서 정수 필드를 처리하는 방법을 이해하지 못합니다. 인덱스는 각 테이블에 대해 올바르게 정의됩니다.

SELECT 
JangRecv.Jangad_Ref_Code,   
LotRecv.Total_Pcs Org_Pcs,  
LotRecv.Total_Cts Org_Cts, 
LotStgWs.Finished_Pcs, 
     (Isnull(ReEst.Exp_Wt,LotRecv.Exp_Yield)) Exp_Yield 
FROM 
Prod_Jangad_Receive_Tran JangRecv With(NoLock) Inner Join 
Prod_Lot_receive_Tran LotRecv With(NoLock) On  (JangRecv.Jangad_Seq_No = LotRecv.Jangad_Seq_No) Inner Join 
Prod_Lot_Stage_Wise_Detl LotStgWs With(NoLock) On (
      LotStgWs.Jangad_Seq_No = LotRecv.Jangad_Seq_No And 
      LotStgWs.Lot_Seq_No = LotRecv.Lot_Seq_No And 
      LotStgWs.Stage_Seq_No = ISNULL(
        (SELECT MAX(Delv_Stage_Seq_No) 
       FROM Prod_Lot_Delivery_Tran  
       WHERE Jangad_Seq_No = JangRecv.Jangad_Seq_No 
       ), JangRecv.Exp_Delv_Stage_Seq_No 
      ) 
      ) Left Outer Join 
PPCS_QMA_Diamond_RE_Estimation ReEst With(NoLock) On (LotStgWs.Jangad_Seq_No = ReEst.Jangad_Seq_No And LotStgWs.Lot_Seq_No = ReEst.Lot_Seq_No And LotStgWs.Stage_Seq_No = ReEst.Stage_Seq_No) 
Where 
LotRecv.Lot_Recv_Div_Seq_No = 1 
ORDER BY JangRecv.Jangad_Ref_Code, LotRecv.Lot_Num_Alias 
+1

관심 분야에서 3 lakh은 몇 개입니까? – StuartLC

+0

@nonnb : Google은 3 lakh이 30 만명이라고 말합니다. –

답변

0

가입 한 모든 항목, 특히 큰 테이블에는 색인이 있어야합니다. 차이점은 중요하지 않습니다. 인덱스가 아닌 열을 검색 (또는 결합)하려면 선형 복잡성 (즉, 2 백만 레코드의 경우 최악의 경우 2 백만 건 비교 수행)이 필요한 전체 테이블 스캔이 필요합니다. 인덱스 된 열에서 데이터베이스 엔진은 로그 복잡성을 가진 이진 검색을 사용할 수 있습니다 (즉, 2 백만 레코드의 경우 최악의 경우 21 개 비교가 필요함).

0

정확하게 문제를 이해하는 경우 쿼리에서 변경하는 것은 LotStgWs.Finished_Pcs를 선택하는 것입니다. 그렇다면 SQL Server 2000에서 이와 비슷한 문제가 발생했습니다 ... Throw LotStgWs.Finished_Pcs에 대한 색인 이것은 전에 저를 위해 일했습니다. 그것은 많은 의미를 가지지는 않는 것처럼 보이지만 작동합니다. 행운을 빕니다

관련 문제