‎2008 Jun 23 12:58 PM
Hi,
This statement is expensive because the information that was entered in the where clause is not very selective.
Kindly suggest the suitable
Check selection entry
SELECT DISTINCT pernr INTO it_pernr-pernr
FROM pa0001
CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND pernr IN s_pernr
AND subty EQ space
AND objps EQ space
AND sprps EQ space
AND endda GE sy-datum
AND begda LE sy-datum
AND seqnr EQ '000'
AND bukrs IN s_bukrs
AND werks IN s_werks
AND persg IN s_persg
AND persk IN s_persk.
READ TABLE it_adpernr INTO wa_adpernr
WITH TABLE KEY pernr = it_pernr-pernr.
IF sy-subrc EQ 0.
APPEND it_pernr.
wa_adpernr-entry = 'X'. "indicator selection
MODIFY it_adpernr FROM wa_adpernr
TRANSPORTING entry
WHERE pernr EQ it_pernr-pernr.
ENDIF.
ENDSELECT.
‎2008 Jun 23 1:07 PM
first of all move all the entries into an internal table .. instead of
select..endselect ..
SELECT DISTINCT pernr INTO table it_pernr
FROM pa0001
CLIENT SPECIFIED
WHERE mandt EQ sy-mandt
AND pernr IN s_pernr
AND subty EQ space
AND objps EQ space
AND sprps EQ space
AND endda GE sy-datum
AND begda LE sy-datum
AND seqnr EQ '000'
AND bukrs IN s_bukrs
AND werks IN s_werks
AND persg IN s_persg
AND persk IN s_persk.
loop at it_pernr.
READ TABLE it_adpernr INTO wa_adpernr
WITH TABLE KEY pernr = it_pernr-pernr.
IF sy-subrc EQ 0.
wa_adpernr-entry = 'X'. "indicator selection
MODIFY it_adpernr FROM wa_adpernr
TRANSPORTING entry
WHERE pernr EQ it_pernr-pernr.
else.
delete it_pernr.
ENDIF.
endloop.