![]() |
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; |
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 |
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 http://www.forosdelweb.com/f100/duda...3/#post2265590 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 |
| La zona horaria es GMT -6. Ahora son las 21:31. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.