2014-02-20 2 views
1

SQL 쿼리의 일부를 최적화하고 싶습니다. 아프지 만 나 자신을 시험해 보았지만 더 나아지지는 않았다. 아쉽게도이 SQL 코드는 최적이 아니며 많은 서버 성능을 필요로합니다. sybase SQL 쿼리 최적화 삽입

insert 
     into #grid (
        depotnummer   , --varchar(18) 
        lagerstelle   , 
        bestand_num   , 
        bestand_neu_ist_num , 
        betrag_num   , 
        kz_versteuerung_jn , 
        id 
        ) 
     select DEPOTNUMMER.PARAMETER_VARCHAR   , 
      LAGERSTELLE_EINBUCHEN.PARAMETER_VARCHAR, 
      BESTAND.PARAMETER_NUMERIC    , 
      ANZAHL_EINBUCHEN.PARAMETER_NUMERIC  , 
      0.00         , 
      'J'         , 
      B.RBM_BUCHUNG_ID 
     from RBM_BUCHUNG    B     , 
      RBM_BUCHUNG_PARAMETER DEPOTNUMMER   , 
      RBM_BUCHUNG_PARAMETER LAGERSTELLE_EINBUCHEN, 
      RBM_BUCHUNG_PARAMETER BESTAND    , 
      RBM_BUCHUNG_PARAMETER ANZAHL_EINBUCHEN  , 
      Kontenstamm    K 
     where B.RBM_VORGANG_ID      = @id 
     and DEPOTNUMMER.RBM_BUCHUNG_ID   = B.RBM_BUCHUNG_ID and convert(char(20),DEPOTNUMMER.PARAMETER_NAME   ) = convert(char(20),'depotnummer'   ) 
     and LAGERSTELLE_EINBUCHEN.RBM_BUCHUNG_ID = B.RBM_BUCHUNG_ID and convert(char(20),LAGERSTELLE_EINBUCHEN.PARAMETER_NAME) in(convert(char(20),'lagerstelle_einbuchen'),'lg_einbuchen') 
     and BESTAND.RBM_BUCHUNG_ID    = B.RBM_BUCHUNG_ID and convert(char(20),BESTAND.PARAMETER_NAME    ) = convert(char(20),'bestand'    ) 
     and ANZAHL_EINBUCHEN.RBM_BUCHUNG_ID  = B.RBM_BUCHUNG_ID and convert(char(20),ANZAHL_EINBUCHEN.PARAMETER_NAME ) = convert(char(20),'anzahl_einbuchen' ) 
     and K.Kontonummer       = DEPOTNUMMER.PARAMETER_VARCHAR 
     and K.MANDANTEN_ID      = isnull(@mandanten_id,K.MANDANTEN_ID) 

     update #grid 
     set primanoten_id = Primanoten_ID 
     from Primanoten  P 
     where P.ID   = id 
     and P.Quelle  = 'RBM' 
    end 

그리고는 실행 계획 출력을 먹으 렴 :

QUERY PLAN FOR STATEMENT 154 (at line 595). 


STEP 1 
    The type of query is INSERT. 

16 operator(s) under root 

    |ROOT:EMIT Operator (VA = 16) 
    | 
    | |INSERT Operator (VA = 15) 
    | | The update mode is direct. 
    | | 
    | | |MERGE JOIN Operator (Join Type: Inner Join) (VA = 14) 
    | | | Using Worktable3 for internal storage. 
    | | | Key Count: 1 
    | | | Key Ordering: ASC 
    | | | 
    | | | |MERGE JOIN Operator (Join Type: Inner Join) (VA = 11) 
    | | | | Using Worktable2 for internal storage. 
    | | | | Key Count: 1 
    | | | | Key Ordering: ASC 
    | | | | 
    | | | | |N-ARY NESTED LOOP JOIN Operator (VA = 8) has 4 children. 
    | | | | | 
    | | | | | |SORT Operator (VA = 1) 
    | | | | | | Average Row width is 6.000000 
    | | | | | | Using Worktable1 for internal storage. 
    | | | | | | 
    | | | | | | |SCAN Operator (VA = 0) 
    | | | | | | | FROM TABLE 
    | | | | | | | RBM_BUCHUNG 
    | | | | | | | B 
    | | | | | | | Index : SK1 
    | | | | | | | Forward Scan. 
    | | | | | | | Positioning by key. 
    | | | | | | | Keys are: 
    | | | | | | | RBM_VORGANG_ID ASC 
    | | | | | | | Using I/O Size 2 Kbytes for index leaf pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | | | Using I/O Size 2 Kbytes for data pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | | | | 
    | | | | | |RESTRICT Operator (VA = 3)(0)(0)(0)(6)(0) 
    | | | | | | 
    | | | | | | |SCAN Operator (VA = 2) 
    | | | | | | | FROM TABLE 
    | | | | | | | RBM_BUCHUNG_PARAMETER 
    | | | | | | | DEPOTNUMMER 
    | | | | | | | Index : SK1 
    | | | | | | | Forward Scan. 
    | | | | | | | Positioning by key. 
    | | | | | | | Keys are: 
    | | | | | | | RBM_BUCHUNG_ID ASC 
    | | | | | | | Using I/O Size 2 Kbytes for index leaf pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | | | Using I/O Size 2 Kbytes for data pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | | | | 
    | | | | | |RESTRICT Operator (VA = 5)(0)(0)(0)(6)(0) 
    | | | | | | 
    | | | | | | |SCAN Operator (VA = 4) 
    | | | | | | | FROM TABLE 
    | | | | | | | Kontenstamm 
    | | | | | | | K 
    | | | | | | | Index : SK2 
    | | | | | | | Forward Scan. 
    | | | | | | | Positioning by key. 
    | | | | | | | Keys are: 
    | | | | | | | Kontonummer ASC 
    | | | | | | | Using I/O Size 2 Kbytes for index leaf pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | | | Using I/O Size 2 Kbytes for data pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | | | | 
    | | | | | |RESTRICT Operator (VA = 7)(0)(0)(0)(6)(0) 
    | | | | | | 
    | | | | | | |SCAN Operator (VA = 6) 
    | | | | | | | FROM TABLE 
    | | | | | | | RBM_BUCHUNG_PARAMETER 
    | | | | | | | BESTAND 
    | | | | | | | Index : SK1 
    | | | | | | | Forward Scan. 
    | | | | | | | Positioning by key. 
    | | | | | | | Keys are: 
    | | | | | | | RBM_BUCHUNG_ID ASC 
    | | | | | | | Using I/O Size 2 Kbytes for index leaf pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | | | Using I/O Size 16 Kbytes for data pages. 
    | | | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | | | 
    | | | | |RESTRICT Operator (VA = 10)(0)(0)(0)(6)(0) 
    | | | | | 
    | | | | | |SCAN Operator (VA = 9) 
    | | | | | | FROM TABLE 
    | | | | | | RBM_BUCHUNG_PARAMETER 
    | | | | | | ANZAHL_EINBUCHEN 
    | | | | | | Index : SK1 
    | | | | | | Forward Scan. 
    | | | | | | Positioning at index start. 
    | | | | | | Using I/O Size 16 Kbytes for index leaf pages. 
    | | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | | Using I/O Size 16 Kbytes for data pages. 
    | | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | | 
    | | | |RESTRICT Operator (VA = 13)(0)(0)(0)(11)(0) 
    | | | | 
    | | | | |SCAN Operator (VA = 12) 
    | | | | | FROM TABLE 
    | | | | | RBM_BUCHUNG_PARAMETER 
    | | | | | LAGERSTELLE_EINBUCHEN 
    | | | | | Index : SK1 
    | | | | | Forward Scan. 
    | | | | | Positioning at index start. 
    | | | | | Using I/O Size 16 Kbytes for index leaf pages. 
    | | | | | With LRU Buffer Replacement Strategy for index leaf pages. 
    | | | | | Using I/O Size 16 Kbytes for data pages. 
    | | | | | With LRU Buffer Replacement Strategy for data pages. 
    | | 
    | | TO TABLE 
    | | #grid 
    | | Using I/O Size 2 Kbytes for data pages. 
+0

스키마를 게시 할 수 있습니까? 또한, 왜 당신은 숯불로 변환하는 모든 일을하고 있습니까? 그것은 거의 확실하게 인덱스 히트를 아프게합니다 ... –

+0

모든 SP가 해당 소문자를 검색하기 위해 작성되기 때문입니다. 그것은 모든 SP를 다시 작성하는 "많이"될 것입니다. 그래서 그것을 수입했다. – user2976744

답변

0

모든 SP의의는 그 소문자를 검색 할 writen 때문이다. 모든 SP를 다시 쓰려면 이 "많이"있어야합니다. 그래서 그것을 수입했다. 나는 "소문자"관련 "숯불로 변환"하지만, 당신이 구체화 된 계산 열을 만들 "변환"값과 (RBM_BUCHUNG_ID + 계산 PARAMETER_NAME) 컬럼들에 대해 커버 인덱스를 만들 수있는 방법을 이해하지 않았다

.

이 경우이 쿼리의 성능이 향상 될 수 있습니다.