sql - How to optimize select sum() on mysql? -


i have sql, it´s taking 2,5 seconds run.

select sum(valorlanca0_.valor_previsto) col_0_0_  cf_valor_lancado_detalhado valorlanca0_  inner join cf_valor_lancado valorlanca1_ on valorlanca0_.id_valor_lancado=valorlanca1_.id_valor_lancado  inner join cf_lancamento lancamento2_ on valorlanca1_.id_lancamento=lancamento2_.id_lancamento  inner join cf_administracao administra12_ on lancamento2_.id_administracao=administra12_.id_administracao  inner join cf_empresa empresa13_ on lancamento2_.id_empresa=empresa13_.id_empresa  inner join cf_usuario usuario14_ on lancamento2_.id_usuario_criou=usuario14_.id_usuario  left outer join cf_forma_pagamento formapagam9_ on valorlanca1_.id_forma_pagamento=formapagam9_.id_forma_pagamento  inner join cf_conta conta10_ on valorlanca1_.id_conta=conta10_.id_conta  left outer join cf_fatura fatura11_ on valorlanca1_.id_fatura=fatura11_.id_fatura  left outer join cf_categoria categoria3_ on valorlanca0_.id_categoria=categoria3_.id_categoria  left outer join cf_centro_custo centrocust4_ on valorlanca0_.id_centro_custo=centrocust4_.id_centro_custo  left outer join cf_fav_fonte_pagadora favfontepa5_ on valorlanca0_.id_fav_fonte_pagadora=favfontepa5_.id_fav_fonte_pagadora  left outer join cf_conta_contabil contaconta6_ on valorlanca0_.id_conta_contabil=contaconta6_.id_conta_contabil  left outer join cf_contato contato7_ on valorlanca0_.id_contato=contato7_.id_contato  left outer join cf_marca marca8_ on valorlanca0_.id_marca=marca8_.id_marca  administra12_.id_administracao=406 , lancamento2_.tipo_conta=2 , (conta10_.id_conta in (2060, 404, 405, 4291, 406, 410, 4292, 403, 4355, 402, 407)) , conta10_.tipo<>9 , lancamento2_.tipo_transacao=10  , (valorlanca1_.situacao in (1)) , ((valorlanca1_.data_prevista<='2015-07-22' , valorlanca1_.situacao=1 or valorlanca1_.data_baixa<='2015-07-22' , valorlanca1_.situacao=3)  , conta10_.tipo<>2 or fatura11_.data_vencimento<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=1 or valorlanca1_.data_baixa<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=3)  , ((empresa13_.id_empresa in (422, 3643)) , usuario14_.id_usuario=574 or empresa13_.id_empresa in (422, 3643)) 

and explain command

1   simple  administra12_   const   primary primary 8   const   1   using index 1   simple  empresa13_      range   primary primary 8       2   using where; using index 1   simple  lancamento2_    ref     primary,fke50fd2d68ac234ec,fke50fd2d6574fcef7,fke50fd2d628d2eae8,idxempresa idxempresa  8   controlese.empresa13_.id_empresa    225 using index condition; using 1   simple  valorlanca1_    ref     primary,fk49527eeb12ddd0da,fk49527eebddd55138,idx_vl_idl,idx_vl_ivl fk49527eeb12ddd0da  8   controlese.lancamento2_.id_lancamento   1   using 1   simple  conta10_        eq_ref  primary primary 8   controlese.valorlanca1_.id_conta    1   using 1   simple  usuario14_      eq_ref  primary primary 8   controlese.lancamento2_.id_usuario_criou    1   using index 1   simple  fatura11_       eq_ref  primary primary 8   controlese.valorlanca1_.id_fatura   1   using 1   simple  formapagam9_    eq_ref  primary primary 8   controlese.valorlanca1_.id_forma_pagamento  1   using index 1   simple  valorlanca0_    ref     fk60a3c74ea9a01ac3,idx_vld_idvl fk60a3c74ea9a01ac3  8   controlese.valorlanca1_.id_valor_lancado    1    1   simple  categoria3_     eq_ref  primary primary 8   controlese.valorlanca0_.id_categoria    1   using index 1   simple  centrocust4_    eq_ref  primary primary 8   controlese.valorlanca0_.id_centro_custo 1   using index 1   simple  favfontepa5_    eq_ref  primary primary 8   controlese.valorlanca0_.id_fav_fonte_pagadora   1   using index 1   simple  contaconta6_    eq_ref  primary primary 8   controlese.valorlanca0_.id_conta_contabil   1   using index 1   simple  contato7_       eq_ref  primary primary 8   controlese.valorlanca0_.id_contato  1   using index 1   simple  marca8_         eq_ref  primary primary 8   controlese.valorlanca0_.id_marca    1   using index 

the biggest table cf_valor_lancado(855m records) , cf_valor_lancado_detalhado (860m records).

what can optimize select?

that 1 hell of query :)

you can start removing tables not used in this:

select sum(valorlanca0_.valor_previsto) col_0_0_  cf_valor_lancado_detalhado valorlanca0_  inner join cf_valor_lancado valorlanca1_ on valorlanca0_.id_valor_lancado=valorlanca1_.id_valor_lancado  inner join cf_lancamento lancamento2_ on valorlanca1_.id_lancamento=lancamento2_.id_lancamento  inner join cf_administracao administra12_ on lancamento2_.id_administracao=administra12_.id_administracao  inner join cf_empresa empresa13_ on lancamento2_.id_empresa=empresa13_.id_empresa  inner join cf_usuario usuario14_ on lancamento2_.id_usuario_criou=usuario14_.id_usuario  inner join cf_conta conta10_ on valorlanca1_.id_conta=conta10_.id_conta  left outer join cf_fatura fatura11_ on valorlanca1_.id_fatura=fatura11_.id_fatura  administra12_.id_administracao=406      , lancamento2_.tipo_conta=2      , (conta10_.id_conta in (2060, 404, 405, 4291, 406, 410, 4292, 403, 4355, 402, 407))      , conta10_.tipo<>9      , lancamento2_.tipo_transacao=10      , (valorlanca1_.situacao in (1))      , ((valorlanca1_.data_prevista<='2015-07-22' , valorlanca1_.situacao=1 or valorlanca1_.data_baixa<='2015-07-22' , valorlanca1_.situacao=3) , conta10_.tipo<>2          or fatura11_.data_vencimento<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=1          or valorlanca1_.data_baixa<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=3         )     , ((empresa13_.id_empresa in (422, 3643)) , usuario14_.id_usuario=574 or empresa13_.id_empresa in (422, 3643)) 

hope helps abit :)

and 1 more (the sql-server may self)

and ((empresa13_.id_empresa in (422, 3643)) , usuario14_.id_usuario=574 or empresa13_.id_empresa in (422, 3643)) 

is equivalent just

and empresa13_.id_empresa in (422, 3643)  

and can try change (95% sure equivalent) - there no nested "or", , helps performance in experience.

and (    (valorlanca1_.data_prevista<='2015-07-22' , valorlanca1_.situacao=1      or valorlanca1_.data_baixa<='2015-07-22' , valorlanca1_.situacao=3 ) , conta10_.tipo<>2  or fatura11_.data_vencimento<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=1  or valorlanca1_.data_baixa<='2015-07-22' , conta10_.tipo=2 , valorlanca1_.situacao=3 ) 

to:

and (    valorlanca1_.data_prevista   <='2015-07-22'   , valorlanca1_.situacao=1 , conta10_.tipo<>2  or fatura11_.data_vencimento <='2015-07-22'   , valorlanca1_.situacao=1 , conta10_.tipo=2  or valorlanca1_.data_baixa   <='2015-07-22'   , valorlanca1_.situacao=3 ) 

Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -