PDA

Ver la Versión Completa : mejorar performance


acontreras
22/01/09, 16:26:38
Hola:

Miren tengo el siguiente codigo:

SELECT ebeln INTO CORRESPONDING FIELDS OF TABLE t_ekko
FROM ekko
WHERE ebeln IN ebeln
AND kdatb IN s_kdatb
AND kdate IN s_kdate .

SELECT banfn bnfpo INTO CORRESPONDING FIELDS OF TABLE t_ekpo
FROM ekpo
FOR ALL ENTRIES IN t_ekko
WHERE ebeln EQ t_ekko-ebeln .

select konnr frgkz banfn ebeln ebelp frgdt bnfpo bsart frggr fixkz
badat bedat lfdat werks ekorg matkl ernam menge meins matnr
txz01 lgort knttp ebakz loekz ekgrp preis peinh waers bsmng
into corresponding fields of table i_eban
from eban
for all entries in t_ekpo
where banfn eq t_ekpo-banfn
and bnfpo eq t_ekpo-bnfpo
and banfn in banfn
and werks in werks
and bsart in bsart
and badat in badat
and ekgrp in ekgrp
and ebeln in ebeln
and bedat in bedat
and konnr in konnr.

y me pidieron optimizarlo utilizando inner join, y me quedó algo así:

SELECT * INTO CORRESPONDING FIELDS OF TABLE i_eban
FROM ekko as A
JOIN ekpo as B ON A~ebeln = B~ebeln
JOIN eban as C ON B~banfn = C~banfn and B~bnfpo = C~bnfpo
WHERE A~ebeln IN ebeln
AND A~kdatb IN s_kdatb
AND A~kdate IN s_kdate
AND C~banfn IN banfn
AND C~werks IN werks
AND C~bsart IN bsart
AND C~badat IN badat
AND C~ekgrp IN ekgrp
AND C~ebeln IN ebeln
AND C~bedat IN bedat
AND C~konnr IN konnr
.

la cosa es que al ejecutarlo no me devuelve los mismos datos, algo estoy haciendo mal en el join, por eso solicito su ayuda.

pd: ya habia escrito antes de este tema pero en la empresa quedo parado, ahora lo volvieron a retomar. ayudenme porfa llevo super poco en abap.
gracias y saludos

mysmb2
22/01/09, 19:07:46
hola,
fijate que con los FOR ALL ENTRIES podes estar trayendo registros duplicados.
otra cosa ya que lo que tenes que hacer es mejorar la performace no te conviene hacer INTO CORRESPONDING FIELDS OF TABLE solamente INTO TABLE pero acordate de que la tabla interna tenga la misma estructura y orden que los campos que recuperas del select.


Saludos

marianoa
23/01/09, 15:16:59
siempre antes de hacer un for all entries te tenes uqe fijar que la tabla interna esa tenga datos, si no eso no influye como condicion y trae todos los datos.

mystic_soul
23/01/09, 18:45:30
Para mi, me parece que todo en un join no va a ser de lo mas performante que digamos, porque estas trabajando con tablas que son pesadas, como la EKPO y la EBAN.. Yo te diria que hagas esto: un join con las tablas EKKO y EKPO, y un select con la tabla resultante del join y la tabla EBAN.. no se si se entiende :S

Por otro lado, fijate esto:
* el corresponding fields en un select no es performante (ya lo dijeron)
* fijate en las condiciones del where, ponerlos ordenados y por clave es un beneficio
* Anda comparando los tiempos y te vas a dar cuenta cuan es performante!

Espero que te pueda ayudar
Saludos!