Las tablas MKPF y MSEG son tablas enormes (ademas la MSEG es un cluster, a grosso modo es que se forma con trozitos de otras tablas) por lo tanto los accesos te van a llevar mucho tiempo
Ademas el planificador de BBDD puede determinar un camino de seleccion distinto cada vez, unas veces te va por un indice y va mas rapido, otras por otro y va mas lento, etc..
Las cosas que puedes ir probando para optimizarlo son :
Cambia la estructura de la tabla T_MSEG para que en lugar de hacer into corresponding fields of tabla .. hagas INTO TABLE t_mseg
Aun mejor seria que en lugar de hacer select * hicieras un select trayendote solo los campos que utilizas
Los campos del where deben ir en el mismo orden que estan declarados en las tablas por ejemplo la condicion LGORT <> '' deberia ir despues del werks
Los indices solo funcionan con comparaciones de igualdad por lo que aunque suponga un esfuerzo extra a veces merece la pena hacer selecciones para conseguir esto
Por ejemplo en lugar de poner LGORT <> '' puedes ir a la tabla T001L, seleccionar todos los almacenes, meterlos en un rango y poner en tu select la condicion LGORT IN s_lgort, esto tambien aplicaria para el budat, seleccionando las fechas comprendidas y metiendolas en un rango
SELECT *
INTO CORRESPONDING FIELDS OF TABLE t_mseg
FROM mseg
INNER JOIN mkpf
ON mkpf~mblnr = mseg~mblnr
AND mkpf~mjahr = mseg~mjahr
WHERE mseg~matnr = p_matnr
AND mseg~werks = 'CENT'
AND mkpf~budat <= fecha_dic
AND mkpf~budat >= fecha_ene
AND mseg~lgort <> ''
|