MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 08/09/16, 14:14:22
migconman migconman is offline
Junior Member
 
Fecha de Ingreso: may 2013
Mensajes: 25
Exclamation Optimizar consulta sql

Hola a todos, tengo un inner join que me pidieron optimizar pero la tabla 'equi' tiene aprox. 9 millones de registros y la tabla 'zmmt_est_seruni' 12millones aprox.

SELECT a~equnr a~sernr a~kunde
INTO TABLE it
FROM equi AS a INNER JOIN zmmt_est_seruni AS b
ON a~sernr = b~sernr
AND a~equnr = b~equnr "add
WHERE a~erdat >= '20050701'
AND b~bwart IN ('X78', '241', 'X05')
AND a~kunde <> space
order by a~sernr a~kunde.

CAMPOS CLAVE:
EQUI: EQUNR
zmmt_est_seruni : SERNR

LA CONSULTA DEMORA APROX. 20 MINUTOS.. NO DA TIME OUT NI NADA, EL SOLO EL TIEMPO DE ESPERA.
Gracias por la ayuda.
Responder Con Cita
  #2  
Viejo 13/09/16, 21:02:24
Anthony Martinez Anthony Martinez is offline
Member
 
Fecha de Ingreso: nov 2012
Mensajes: 30
Smile una opcion

hola migconman, te envio el codigo que podrias reemplazar y probar para que obtengas el mismo resultado en menos tiempo, me comentas como te fue:


REPORT zprueba019.

DATA: ra_matnr TYPE RANGE OF mara-matnr.

TYPES: BEGIN OF gty_equi,
equnr TYPE equi-equnr,
erdat TYPE equi-erdat,
matnr TYPE equi-matnr,
sernr TYPE equi-sernr,
kunde TYPE equi-kunde,
END OF gty_equi.

TYPES: BEGIN OF gty_mmt_est_seruni,
sernr TYPE zmmt_est_seruni-sernr,
equnr TYPE zmmt_est_seruni-equnr,
END OF gty_mmt_est_seruni.

DATA: lt_equi TYPE STANDARD TABLE OF gty_equi,
lt_mmt_est_seruni TYPE STANDARD TABLE OF zmmt_est_seruni.

FIELD-SYMBOLS: <fs_equi> LIKE LINE OF lt_equi.

*Realizas tu consulta en la tabla EQUI usando el comodin HINTS para utilizar el indice de esa tabla
SELECT equnr erdat matnr sernr kunde
INTO TABLE lt_equi
FROM equi
WHERE sernr NE space
AND matnr IN ra_matnr
%_HINTS ORACLE 'INDEX("EQUI" "EQUI~A")'.
IF lt_equi[] IS NOT INITIAL.
DELETE lt_equi WHERE erdat LT '20050701'.
DELETE lt_equi WHERE kunde EQ space.

SELECT sernr equnr
INTO TABLE lt_mmt_est_seruni
FROM zmmt_est_seruni
FOR ALL ENTRIES IN lt_equi
WHERE sernr EQ lt_equi-sernr
AND equnr EQ lt_equi-equnr
AND bwart IN ('X78', '241', 'X05').

SORT lt_mmt_est_seruni BY sernr equnr.
LOOP AT lt_equi ASSIGNING <fs_equi>.
READ TABLE lt_mmt_est_seruni
WITH KEY sernr = <fs_equi>-sernr
equnr = <fs_equi>-equnr
BINARY SEARCH
TRANSPORTING NO FIELDS.
IF sy-subrc NE 0.
MOVE 'X' TO <fs_equi>-flag.
ENDIF.
ENDLOOP.
* Despues que borres los registros marcados de esta tabla interna tendras los registros que necesitas en tu inner join inicial
DELETE lt_equi WHERE flag EQ 'X'.
SORT lt_equi BY equnr sernr kunde.
ENDIF.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 23:47:04.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web