Code: Alles auswählen.
SELECT * FROM wbrk INTO TABLE gt_wbrk
FOR ALL ENTRIES IN gt_knvv
WHERE wdtyp = 'B'
AND valdtd > p_stichd
AND ( vkorg = gt_knvv-vkorg
OR ( vkorg = gc_vkorg_init AND ekorg = gt_knvv-vkorg ) )
AND kunre = gt_knvv-kunnr
AND lifre IN so_lifre
AND vtweg = gt_knvv-vtweg
AND spart = gt_knvv-spart
AND rfbsk NOT IN ('R','D')
AND /zrb/belegtyp IN (' ','1')
AND wrart IN lt_wrart "('ZR', 'IB', 'FORD' 'ZA').
AND wfdat <= p_stichd
%_HINTS DB6 '<IXSCAN TABLE="WBRK" SAP_INDEX="WBRK~Z05"/>)'.
Code: Alles auswählen.
SELECT kunre vkorg vtweg spart lifre ekorg bukrs valdtd brtwr /zrb/kzwi1
valdt waerl /zrb/kein_delk lfgru bldat brtwrd /zrb/kzwi1d mwsbk /zrb/kzwi2
/zrb/kzwi2d /zrb/at_steu_sum /zrb/at_wert_sum netwr gskto gsktod lftyp
FROM wbrk INTO CORRESPONDING FIELDS OF TABLE gt_wbrk
WHERE wdtyp = 'B'
AND valdtd > p_stichd
AND ( vkorg = s_vkorg
OR ( vkorg = gc_vkorg_init AND ekorg = s_vkorg ) )
AND kunre = s_kunnr
AND lifre IN so_lifre
AND vtweg = s_vtweg
"AND spart = gt_knvv-spart
AND rfbsk NOT IN ('R','D')
AND /zrb/belegtyp IN (' ','1')
AND wrart IN lt_wrart
AND wfdat <= p_stichd
%_HINTS DB6 '<IXSCAN TABLE="WBRK" SAP_INDEX="WBRK~Z05"/>)'.
LOOP AT gt_knvv ASSIGNING FIELD-SYMBOL(<ls_knvv>).
READ TABLE gt_wbrk WITH KEY vkorg = <ls_knvv>-vkorg kunre = <ls_knvv>-kunnr
vtweg = <ls_knvv>-vtweg TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE gt_wbrk WHERE vkorg = <ls_knvv>-vkorg AND kunre = <ls_knvv>-kunnr
AND vtweg = <ls_knvv>-vtweg .
ENDIF.
ENDLOOP.
Folgende Benutzer bedankten sich beim Autor gtoXX für den Beitrag:
DeathAndPain
Kann bei so einem konfusen SELECT aber durchaus Sinn machen, wenn man als Programmierer genau beurteilen kann, über welchen Index die Datenbank einsteigen sollte. Angesichts der Laufzeit ist freilich zu vermuten, dass das hier nicht der Fall ist.
Allein das reicht ja schon als Erklärung aus, da es dadurch Kreuzprodukte gibt und sich die Ergebnismenge folglich vervielfacht!
Das ist egal; der Datenbank-Optimierer sucht sich anhand der angegebenen Selektionskriterien den besten Index heraus. Die Reihenfolge, in der die Kriterien angegeben werden, spielt keine Rolle. RFBSK würde er eh nicht nutzen können, da auf WFDAT per Ungleichheit geprüft wird, so dass die Indexnutzung dort schon enden würde und das zweite Feld egal wäre.