Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > Oracle

Respuesta
 
Herramientas Desplegado
Antiguo 22-abr-2008, 11:41   #1 (permalink)
Michelc ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 21
Uso de Inner Join

Hola, una consulta, tengo esta sentencia con inner Join y me demora aprox. 7 minutos

SELECT a.MdaAlmCod,
a.MddTipDoc,
a.CDTNroDoc,
a.CDTFchTrn,
a.MdcCcoCod,
b.DDTCodSec,
b.DDPNroPda,
b.DDTTpoPda,
Left(b.DDTItmCod, 1 ) As PrdProd,
SubString(b.DDTItmCod, 2, 1) As FamProd,
--Case When b.DDTCodSec = 'H' Then SubString(b.DDTItmCod, 3, 6) Else SubString(b.DDTItmCod, 3, 6) End DesProd,
SubString(b.DDTItmCod, 3, 6) DesProd,
SubString(b.DDTItmCod, 9, 2) As VrnProd,
a.CDTRefDoc,
SUM(b.DDTCntKgs) KgsDsp,
SUM((Case When DDTCldPar = '1' Or DDTCldPar = ' ' Or DDTCldPar = '0' Then b.DDTCntUnd Else 0 End)) Und1era,
SUM((Case When DDTCldPar = '2' Then b.DDTCntUnd Else 0 End)) Und2das
FROM CT3T004 a
INNER Join CT3T005 b On
b.MdaAlmCod = a.MdaAlmCod And
b.MddTipDoc = a.MddTipDoc And
b.CDTNroDoc = a.CDTNroDoc
WHERE A.MDAALMCOD = 'CTL'
AND a.MddTipDoc = 'NS'
And a.CDTFchTrn Between pFechaIni And pFechaFin
And b.DDTCodSec = vCodSec
--And a.MdcCcoCod = DECODE(ALLTRIM(vCCsCod),NULL,a.MdcCcoCod, vCCsCod)
--And b.DDTTPOPDA = DECODE(ALLTRIM(vTpoPda),NULL,b.DDTTPOPDA,vTpoPda)
GROUP BY A.MdaAlmCod,
A.MddTipDoc,
A.CDTNroDoc,
CDTFchTrn,
MdcCcoCod,
DDTCodSec,
DDPNroPda,
DDTTpoPda,
b.DDTItmCod,
CDTRefDoc;

con esta sentencia me demora 2 segundos ¿por qué?

SELECT /*+ INDEX (b SYS_C009606) */
a.mdaalmcod, a.mddtipdoc, a.cdtnrodoc, a.cdtfchtrn, a.mdcccocod,
b.ddtcodsec, b.ddpnropda, b.ddttpopda,
LEFT (b.ddtitmcod, 1) AS prdprod,
substring (b.ddtitmcod, 2, 1) AS famprod,
substring (b.ddtitmcod, 3, 6) desprod,
substring (b.ddtitmcod, 9, 2) AS vrnprod, a.cdtrefdoc,
SUM (b.ddtcntkgs) kgsdsp,
SUM ((CASE
WHEN b.ddtcldpar = '1'
OR b.ddtcldpar = ' '
OR b.ddtcldpar = '0'
THEN b.ddtcntund
ELSE 0
END
)
) und1era,
SUM ((CASE
WHEN b.ddtcldpar = '2'
THEN b.ddtcntund
ELSE 0
END)) und2das
FROM ct3t005 b, ct3t004 a
WHERE a.mdaalmcod = 'CTL'
AND a.mddtipdoc = 'NS'
AND a.cdtfchtrn BETWEEN pFechaIni
AND pFechaFin
AND b.ddtcodsec = vCodSec
And a.MdcCcoCod = DECODE(ALLTRIM(vCCsCod),NULL,a.MdcCcoCod, vCCsCod)
And b.DDTTPOPDA = DECODE(ALLTRIM(vTpoPda),NULL,b.DDTTPOPDA,vTpoPda)
AND b.mdaalmcod = a.mdaalmcod
AND b.mddtipdoc = a.mddtipdoc
AND b.cdtnrodoc = a.cdtnrodoc
GROUP BY a.mdaalmcod,
a.mddtipdoc,
a.cdtnrodoc,
a.cdtfchtrn,
a.mdcccocod,
b.ddtcodsec,
b.ddpnropda,
b.ddttpopda,
b.ddtitmcod,
a.cdtrefdoc;
Michelc está desconectado   Responder Citando
Antiguo 22-abr-2008, 18:40   #2 (permalink)
kikolice ha deshabilitado el karma
 
Avatar de kikolice
 
Fecha de Ingreso: marzo-2004
Mensajes: 984
Re: Uso de Inner Join

no me puse a analizar toda la sentencia pero por lo de

/*+ INDEX (b SYS_C009606) */

esta obligando a usar el indice, supongo que en la primera consulta oracle no lo esta usando y por eso se tarda mas
__________________
Blogzote.com :-) Mi blog
kikolice está desconectado   Responder Citando
Antiguo 23-abr-2008, 08:49   #3 (permalink)
matanga ha deshabilitado el karma
 
Fecha de Ingreso: octubre-2007
Ubicación: Barcelona, España
Mensajes: 478
Re: Uso de Inner Join

Hola,

Si quieres saber como se esta accediendo a las tablas, tienes que ver el plan de ejecucion, te dejo un ejemplo Duda sobre rendimiento en selects con JOIN, ON y WHERE

De todos modos, si utilizas el optimizador en CBO, que asumo que si, tienes que actualizar las estadisticas para no tener o al menos reducir la necesidad de utilizar hints, para esto busca informacion sobre el paquete DBMS_STATS

Saludos
matanga está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:22.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93