FOR ALL ENTRIES vs. INNER JOIN
REPORT Z_DUMMY_ATG NO STANDARD PAGE HEADING.
TABLES: BKPF, BSEG.
DATA: T_BKPF TYPE STANDARD TABLE OF BKPF
WITH HEADER LINE,
T_BSAK TYPE STANDARD TABLE OF BSAK
WITH HEADER LINE.
DATA: RT_STR TYPE I,
RT_END TYPE I,
RUN_TIME1 TYPE P DECIMALS 2,
RUN_TIME2 TYPE P DECIMALS 2.
SELECT *
INTO TABLE T_BKPF
FROM BKPF.
IF NOT T_BKPF[] IS INITIAL.
GET RUN TIME FIELD RT_STR.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE T_BSAK
FROM BSAK
FOR ALL ENTRIES IN T_BKPF
WHERE BELNR EQ T_BKPF-BELNR.
GET RUN TIME FIELD RT_END.
RUN_TIME1 = ( RT_END - RT_STR ) / 1000000 .
ENDIF.
WRITE: ‘Runtime para FOR ALL ENTRIES’, RUN_TIME1.
CLEAR: T_BKPF,T_BSAK.
REFRESH: T_BKPF,T_BSAK.
GET RUN TIME FIELD RT_STR.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE T_BSAK
FROM ( BKPF INNER JOIN BSAK
ON BKPF~BELNR = BSAK~BELNR ).
GET RUN TIME FIELD RT_END.
RUN_TIME2 = ( RT_END - RT_STR ) / 1000000 .
WRITE:/ ‘Runtime para JOIN’, RUN_TIME2.
Analicemos los resultados…
Prueba 1:
———
Runtime para FOR ALL ENTRIES 0.12
Runtime para JOIN 0.02
Prueba 2:
———
Runtime para FOR ALL ENTRIES 0.10
Runtime para JOIN 0.01
Prueba 3:
———
Runtime para FOR ALL ENTRIES 0.11
Runtime para JOIN 0.02
Claramente, el INNER JOIN supera al FOR ALL ENTRIES…Y por mucho…
Saludos,
Blag.