Improve Performance using Left Join

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Poston Fri, 25 Apr 2008 1:20 pm

Hey guys, okay?
I have a select using the clause WHERE NOT EXISTS and is taking too long to bring the data.
I would like to know how to implement LEFT JOIN in this specific case, to decrease the time it takes to bring the values.
Code: Select all
select     A.MKT_DATA_AGGR_CODE                        COD_AGRUPADOR
         , H.MKT_DATA_ATRIB_CODE                       COD_ATRIBUTO
         , F.MKT_DATA_BUS_AGGR_CODE                      COD_GRP_MONITOR
         , B.MKT_DATA_AGGR_NAME                        NOME_AGRUPADOR
         , C.RATE_SOURCE_NAME                          NOME_FONTE_DESTINO
         , I.MKT_DATA_ATRIB_NAME                       NOME_ATRIBUTO
         , G.MKT_DATA_BUS_AGGR_NAME                      NOME_GRP_MONITOR
      from DATA_MARKET           A
         , AGGR_DATA_MARKET      B
         , SOURCE_RATE           C
         , ASSOC_AGGR_DATA_MKT F
         , AGGR_BUS_DATA_MARKET    G
         , ASSOC_DATA_MKT_ATRIB  H
         , ATRIB_DATA_MARKET     I
     where A.MKT_DATA_AGGR_CODE       = B.MKT_DATA_AGGR_CODE
       and A.RATE_SOURCE_CODE         = B.RATE_SOURCE_CODE
       and A.ACTV_MKT_DATA_IND        = 'S'
       and A.RATE_SOURCE_CODE         = C.RATE_SOURCE_CODE

       and not exists  (select 'x'from ATRIB_DATA_MKT_IMP J
                                     , LOG_INTER          K
                                     , DATA_MARKET_IMP    L
                                 where J.LOG_ID                = K.LOG_ID
                                   and H.MKT_DATA_AGGR_CODE    = J.MKT_DATA_AGGR_CODE
                                   and H.RATE_SOURCE_CODE      = J.RATE_SOURCE_CODE
                                   and H.MKT_DATA_CODE         = J.MKT_DATA_CODE
                                   and H.MKT_DATA_ATRIB_CODE   = J.MKT_DATA_ATRIB_CODE
                                   and L.MKT_DATA_AGGR_CODE    = J.MKT_DATA_AGGR_CODE
                                   and L.RATE_SOURCE_CODE      = J.RATE_SOURCE_CODE
                                   and L.MKT_DATA_CODE         = J.MKT_DATA_CODE
                                   and L.LOG_ID                = J.LOG_ID
                       )
 
     group by A.MKT_DATA_AGGR_CODE
            , A.RATE_SOURCE_CODE
            , A.MKT_DATA_CODE
            , H.MKT_DATA_ATRIB_CODE
            , F.MKT_DATA_BUS_AGGR_CODE
            , B.MKT_DATA_AGGR_NAME
            , C.RATE_SOURCE_NAME
            , nvl(A.MKT_DATA_LABEL_TEXT, A.MKT_DATA_NAME)
            , I.MKT_DATA_ATRIB_NAME
            , G.MKT_DATA_BUS_AGGR_NAME
            , G.SG_FUNC_GROUP_NAME
            , A.ARRVL_PRELMNRY_TIME
            , A.MKT_DATA_CMNT_TEXT

anyone have any ideas?
Toad
Location: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek

Poston Fri, 25 Apr 2008 5:02 pm

I got something here that brought me the same data in 2, 3s instead of 34.953:
Code: Select all

select  A.MKT_DATA_AGGR_CODE                     COD_AGRUPADOR
         , H.MKT_DATA_ATRIB_CODE                       COD_ATRIBUTO
         , F.MKT_DATA_BUS_AGGR_CODE                    COD_GRP_MONITOR
         , B.MKT_DATA_AGGR_NAME                        NOME_AGRUPADOR
         , C.RATE_SOURCE_NAME                          NOME_FONTE_DESTINO
         , I.MKT_DATA_ATRIB_NAME                       NOME_ATRIBUTO
         , G.MKT_DATA_BUS_AGGR_NAME                    NOME_GRP_MONITOR
      from DATA_MARKET           A
         , AGGR_DATA_MARKET      B
         , SOURCE_RATE           C
         , ASSOC_AGGR_DATA_MKT F
         , AGGR_BUS_DATA_MARKET    G
         , ASSOC_DATA_MKT_ATRIB  H
         , ATRIB_DATA_MARKET     I
         
         -- ADICIONEI AS DUAS TABELAS
         , ATRIB_DATA_MKT_IMP J
         , MOV_ATRIB_DATA_MKT_IMP M

     where A.MKT_DATA_AGGR_CODE       = B.MKT_DATA_AGGR_CODE
       and A.RATE_SOURCE_CODE         = B.RATE_SOURCE_CODE
       and A.ACTV_MKT_DATA_IND        = 'S'
       and A.RATE_SOURCE_CODE         = C.RATE_SOURCE_CODE


       -- AS ALTERAÇÕES FORAM FEITAS AQUI:

       AND M.MKT_DATA_AGGR_CODE    (+)= H.MKT_DATA_AGGR_CODE
       AND M.RATE_SOURCE_CODE      (+)= H.RATE_SOURCE_CODE
       AND M.MKT_DATA_CODE         (+)= H.MKT_DATA_CODE
       AND M.MKT_DATA_ATRIB_CODE   (+)= H.MKT_DATA_ATRIB_CODE

       AND NOT EXISTS  (select X.MKT_DATA_AGGR_CODE
                                     from  LOG_INTER          K
                                         , DATA_MARKET_IMP    L
                                         , ATRIB_DATA_MKT_IMP X
                                     where X.LOG_ID              = K.LOG_ID
                                     and L.MKT_DATA_AGGR_CODE    = X.MKT_DATA_AGGR_CODE
                                     and L.RATE_SOURCE_CODE      = X.RATE_SOURCE_CODE
                                     and L.MKT_DATA_CODE         = X.MKT_DATA_CODE
                                     and L.LOG_ID                = X.LOG_ID
                                     AND X.MKT_DATA_AGGR_CODE    = J.MKT_DATA_AGGR_CODE
                        )
=]
Toad
Location: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek


  • See also
    Replies
    Views
    Last Post


      Return to SQL

      Who is online

      Users browsing this forum: No registered users and 4 guests