[firebase-br] Interbase rpido x Firebird muito lento. Me ajudem com esse problema por favor.

Rodolpho da Silva nascimento em gko.com.br
Qua Maio 13 17:02:04 -03 2009


Marcelo,

Experimente este select......


select a.* from associados a
where not exists (select codigo_associado 
                          from pagamentos p 
                          where p.codigo_associado = a.codigo_associado
                              and p.ano_pagamento = 2008)


  ----- Original Message ----- 
  From: Marcelo Pinto 
  To: lista em firebase.com.br 
  Sent: Wednesday, May 13, 2009 4:42 PM
  Subject: Interbase rpido x Firebird muito lento. Me ajudem com esse problema por favor.



  Pessoal é o seguinte, tenho as tabelas ASSOCIADOS e PAGAMENTOS. E preciso
  saber quem pagou uma determinada anuidade e quem não pagou.

  As tabelas estão assim:

  ASSOCIADOS  (5696 registros)
  -------------
  codigo_associado    nome_associado
  01                        Fulano
  02                        Beltrano
  03                        Ciclano

  PAGAMENTOS  (17114 registros)
  -------------
  codigo_associado  ano_pagamento  valor_pagamento
  01                      2007                 100,00
  01                      2008                 110,00
  01                      2009                 120,00
  02                      2008                 110,00
  02                      2009                 120,00
  03                      2008                 110,00

  Fiz o seguinte sql para mostrar quem pagou (2008 por ex.):
  select * from associados
  where codigo_associado in (select codigo_associado from pagamentos where
  ano_pagamento = 2008)

  Esse o firebird roda tranquilo.

  O meu problema maior é quando preciso listar os que não pagaram (2008 de
  novo):

  select * from associados
  where codigo_associado NOT in (select codigo_associado from pagamentos where
  ano_pagamento = 2008)

  Nesse caso o firebird demora cerca de 2min pra terminar a consulta e com o
  interbase é instantâneo.
  Pq essa diferença toda???

  Será que alguém pode me dar uma ajuda?
  Já tentei utilizar inner join, mas não dava os resultados esperados.
  Acabava tendo q utilizar o NOT IN de qualquer forma.  E é exatamente ele q
  deixa tudo muito lento.

  A tabela associados está com PK no codigo_associado e a tabela de pagamentos
  está com PK no codigo_associado,ano_pagamento.

  A única diferença na execução do sql entre o firebird e o interbase foi no
  PLAN.
  Enquanto o firebird utilizou: PLAN (PAGAMENTOS NATURAL) PLAN (ASSOCIADOS
  NATURAL)
  O interbase fez: PLAN (PAGAMENTOS INDEX (RDB$PRIMARY3)) PLAN (ASSOCIADOS
  NATURAL)

  Alguém tem idéia do que pode estar acontecendo?
  Ou alguma idéia pra eu montar um select mais rápido?

  Obrigado desde já.
  Marcelo Pinto







------------------------------------------------------------------------------


  ______________________________________________
  FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
  Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
  Para consultar mensagens antigas: http://firebase.com.br/pesquisa


------------------------------------------------------------------------------



  No virus found in this incoming message.
  Checked by AVG - www.avg.com 
  Version: 8.5.325 / Virus Database: 270.12.27/2112 - Release Date: 05/13/09 07:04:00



Mais detalhes sobre a lista de discussão lista