Ver Mensaje Individual
  #2  
Viejo 02/09/09, 08:43:36
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
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 <> ''
Responder Con Cita