PDA

Ver la Versión Completa : Demora en Consulta


brujop
26/08/13, 14:00:10
Buen dia, amigos de mundosap tengo una consulta que demora mas de tres minutos en ejecutarse, es la siguiente:

SELECT cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
coep~kstar coep~parob
INTO CORRESPONDING FIELDS OF TABLE ti_cobk_coep3
FROM coep
INNER JOIN cobk ON coep~mandt = cobk~mandt AND coep~kokrs = cobk~kokrs AND coep~belnr = cobk~belnr
WHERE cobk~budat IN so_budat AND
coep~kokrs EQ 'GAND' AND
coep~wrttp EQ '04' AND
coep~lednr EQ '00' AND
coep~objnr IN r_objnr AND
coep~vrgng NE 'KOAO'.

Espero me puedan ayudar a optimizarla, me han dicho que se puede utilizar funciones en vez de los select, o tambien con vistas, si tuvieran algun ejemplo me caeria perfecto.

Muchas Gracias.

Mauricio Hidalgo
26/08/13, 18:31:11
Estimado partir la consulta por la fecha de contabilizacion en la tabla COBK pésimo porque esa tabla no esta indexada por ese campo según mi instalacion de SAP. Básate en los indices secundarios que tiene disponible en la tabla COEP. Pareciera que el mas cercano según tus parametros de consulta es el índice COEP~1 eso si te faltaria poner el ejercicio como parámetro de consulta, el orden sería:

where coep~lednr EQ '00' AND
coep~objnr IN r_objnr AND
coep~gjahr IN r_gjahr (añade este parámetro)
coep~wrttp EQ '04'.

Hasta aquí para que el opmizador use el indice que te indico

y luego desde tu tabla interna borras según los otros parámetros que tienes

delete ti_cobk_coep3 where budat not in so_budat.
delete ti_cobk_coep3 where kokrs <> 'GAND'.
delete ti_cobk_coep3 where vrgng = 'KOAO'.


Espero te ayude

brujop
27/08/13, 15:59:11
Mauricio gracias por responder, te comento que tengo como parametros de ingreso:

La fecha de contabilizacion
Centro
Planificador de necesidades

Si ya tengo la fecha es necesario colocar el Ejercicio.

Coloque lo que indicaste pero la performance no mejoro.
Si tuvieras alguna otra ayuda te lo agradeceria.

Anthony Martinez
27/08/13, 20:51:14
Lo que deberias hacer primero es de alguna forma crear una estrctura que tenga los mismos campos y en el mismo orden de los campos que recoges en tu select (cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
coep~kstar coep~parob) y hacer into table sin corresponding, segundo seria bueno que en tu pantalla de seleccion puedas agregarle coo parametro la sociedad CO que deseas consultar, porque hay que tener en cuenta que la tabla COEP es una tabla de gran dimension y sino le filtras con sus campos llave correspondientes podrias estar traendo una gran cantidad de informacion y es por ello la demora.

Buen dia, amigos de mundosap tengo una consulta que demora mas de tres minutos en ejecutarse, es la siguiente:

SELECT cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
coep~kstar coep~parob
INTO CORRESPONDING FIELDS OF TABLE ti_cobk_coep3
FROM coep
INNER JOIN cobk ON coep~mandt = cobk~mandt AND coep~kokrs = cobk~kokrs AND coep~belnr = cobk~belnr
WHERE cobk~budat IN so_budat AND
coep~kokrs EQ 'GAND' AND
coep~wrttp EQ '04' AND
coep~lednr EQ '00' AND
coep~objnr IN r_objnr AND
coep~vrgng NE 'KOAO'.

Espero me puedan ayudar a optimizarla, me han dicho que se puede utilizar funciones en vez de los select, o tambien con vistas, si tuvieran algun ejemplo me caeria perfecto.

Muchas Gracias.

jdelgado86
12/09/13, 21:04:40
Crea un indice en la tabla y despues en el select pones algo asi

SELECT
bukrs
belnr
gjahr
budat
monat
blart
INTO TABLE it_bkpf
FROM
bkpf
WHERE
bukrs = p_bukrs AND
gjahr = p_gjahr AND
monat = p_monat
%_HINTS DB6 '<IXSCAN TABLE=''BKPF'' INDEX=''"BKPF~BUT"'' />' .

cambiarias la tabla bkpf y remplazarias BUT por el indice tuyo, segun se con esto obligas a que la busqueda utilice dicho indice, Suerte!!