FOR ALL ENTRIES vs. INNER JOIN

Mucha gente se pregunta…Que es más rápido de ejecutar…Un FOR ALL ENTRIES o un INNER JOIN? Pues bueno, para que queden dudas, he hecho un pequeño programa para medir el tiempo de ejecución entre dos tablas BKPF y BSAK.

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.

Leave a Comment

Cerrar
E-mail It