[firebase-br] Problemas com GroupBy e campos calculados

Welson Avelar welson_avelar em yahoo.com.br
Sex Dez 8 12:01:26 -03 2006


--- Welson Avelar escreveu:
> --- Campus escreveu:
> > Só por curiosidade, como fica a performance desse select ?
> [--x--]
> 
> [Welson] Bom, confesso que inicialmente demorava minutos (mais de 5), ainda
> mais que a tabela tem muitos dados, mas não sei estimar quantos "muitos"
> dados
> sejam.
> Mas substitui os joins no where por inner join e melhorou significativamente.
> Continuava a demorar minutos, porém menos que 5. Parti então pra criar
> índices
> nos campos que se relacionam nesse select, mas antes de fazer isso, analisei
> se
> esses campos que seriam indexados são também usados em mais querys do
> sistema.
> Por sorte, todos os campos são usados em comparações em outras partes do
> sistema e os indexei em vista disso.
> Pra matar de vez o problema, fiz um backup/restore no banco e agora sai em
> menos de um minuto o resultado, QUASE instantaneamente. Estou satisfeito com
> o
> resultado.
[--x--]

[Welson] Esqueci de colocar como eu deixei a query. Pra quem tiver curiosidade,
olha só:

>----------------------<

SELECT
   p.matriculacliente,
   p.nomecliente,
   cl.cepcomercial,
   cl.cepresidencial,

   SUM(prf.valormensal),

   ((a.receitasoperacionais - (a.materiaprima - a.outroscustosvariaveis) -
a.custosfixos) - a.amortizacaodividas)
      AS disponibilidade,

   p.rendaliquidamensal,

   (p.idpab) AS pab,

   CASE p.moradia
      WHEN 0 THEN 'Propria'
      WHEN 1 THEN 'Alugada'
      WHEN 2 THEN 'Cedida'
      WHEN 3 THEN 'Outros'
   END AS Moradia,

   CASE p.grauinstrucao
      WHEN 0 THEN '1o. grau incompleto'
      WHEN 1 THEN '1o. grau completo'
      WHEN 2 THEN '2o. grau incompleto'
      WHEN 3 THEN '2o. grau completo'
      WHEN 4 THEN 'Superior incompleto'
      WHEN 5 THEN 'Superior completo'
   END AS GrauDeInstrucao,

   CASE p.tiponegocio1
      WHEN 0 THEN 'Fixo'
      WHEN 1 THEN 'Serviço à domicílio'
      WHEN 2 THEN 'Ambulante'
      WHEN 3 THEN 'Feirante'
      WHEN 4 THEN 'Outros'
   END AS TipoDeNegocio

FROM
   tbpesquisas p

   INNER JOIN (tbapresentacoes a
      INNER JOIN tbclientes cl ON ((a.matriculacliente = cl.idcliente) AND
(a.idpab = cl.idpab)))
   ON (a.matriculacliente = p.matriculacliente) AND (a.idpab = p.idpab)

   INNER JOIN tbcontratos ct ON ((ct.matriculacliente = p.matriculacliente)
                                  AND (ct.idpab = p.idpab))

   INNER JOIN tbpesquisarendafamiliar prf ON ((prf.idpesquisa = p.idpesquisa)
                                              AND (prf.idpab = p.idpab))

WHERE
   (ct.dataassinaturacontrato >= '01.09.2004')
   AND (ct.dataassinaturacontrato <= '30.09.2006')

GROUP BY 1, 2, 3, 4, 6, 7, 8, 9, 10, 11

>----------------------<

Ah, e agora sai EXATAMENTE no instante que executo o código acima. Não sei
porque cargas d'água (me deu na telha do nada oO), resolvi dar um shutdown no
servidor do FB e abrir novamente. Agora sai que nem bala a query... XD


[]s.

=================================
'O que me preocupa não é o grito dos maus. É o silêncio dos bons.'
Martin Luther King.
=================================
Welson de Avelar Soares Filho
Analista/Programador Delphi
Gemini Sistemas
www.geminisistemas.com.br
Juiz de Fora - Minas Gerais
=================================


		
_______________________________________________________ 
Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular. Registre seu aparelho agora! 
http://br.mobile.yahoo.com/mailalertas/ 
 





Mais detalhes sobre a lista de discussão lista