简体   繁体   中英

Optimizing sybase SQL Query Insert

i would like to optimize one part of my SQL Query. Ill tryed it myself, but it didnt get it better, its get even more worse. Ill know that this SQL code isn't optimal and it eat a lot of server performance.

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

And thats the Showplan Output:

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.

Because all SP's are writen to search for that lower case. that would be "to much" to rewrite all the SP'S. SO its importened to do that.

I didn't understood how "convert to char" related with "lower case" but, you could create a materialized computed column for "convert" value and create a covered index for columns (RBM_BUCHUNG_ID + computed PARAMETER_NAME).

This case could increase perfomance of your query.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM