select muito lento

Firebird

17/07/2003

estou com problemas:

uso o ib 6.0 e delphi 6 e ibexpert

tenho uma tabela de:

orcamento com (1.500 registro)
cliente (500 registro)
convenio (200 registro)
paciente (10.000 registrto)

todas possuem chave primaria e integridade referencial (restrict)

quando dou um select ex:

select numorc,datorc,c.nomcli,n.nomcon,p.nompac
from orcamento o inner join cliente c
on (o.codfil||o.codcli=c.codfil||c.codcli) inner join convenio n
on (o.codfil||o.codcon=n.codfil||n.codcon) inner join paciente p
on (o.codfil||o.codpac=p.codfil||p.codpac)

where codfil=1 and codcli=1
order by codfil,codcli

demora muito mesmo (é mais lento do que o paradox)
o que eu faço ?

e se eu unir com itens orcamento fica pior ainda


Helder Andr

Helder Andr

Curtidas 0

Respostas

Afarias

Afarias

17/07/2003

|select numorc,datorc,c.nomcli,n.nomcon,p.nompac
|from orcamento o inner join cliente c
|on (o.codfil||o.codcli=c.codfil||c.codcli) inner join convenio n
|on (o.codfil||o.codcon=n.codfil||n.codcon) inner join paciente p
|on (o.codfil||o.codpac=p.codfil||p.codpac)


de cara, o problema é q vc está concatenando os campos que faram as buscas, sendo assim o IB não vai utilizar seus índices. No mais, não dá pra dizer muito sem ter um exemplo do banco, ou ao menos o metadata ou o PLAN retornado pelo IB.

Utilize o software IBPlanAnalizer para otimizar seus SQLs.


Abraço


GOSTEI 0
Imstaff

Imstaff

17/07/2003

O que você quer fazer exatamente? As vezes tem uma maneira melhor de bolar o sql.


GOSTEI 0
POSTAR