Consulta travando no firebird

Firebird

03/08/2015

Bom dia,

estou realizando o seguinte select no firebird, porém ele trava, acredito que seja devido a quantidade de dados para retornar.

É uma limitação ou posso tentar otimizar a consulta?

Segue abaixo a maneira que estou consultando.

select ins.CDINSUMO, mins.CDINSUMO, ins.DEINSUMO, det.CDDETALHE, det.DEDETALHE , ins.CDUNIDADEMEDIDA , uni.CDUNIDADEMEDIDA , uni.DEUNIDADEMEDIDA ,
uni.DESIMBOLO ,  mins.CDMARCA ,  cmarc.CDMARCA, cmarc.DEMARCA, ins.flativo, det.flativo, uni.FLATIVO , mins.FLATIVO , cmarc.FLATIVO
    from ecstdetalheinsumo det, ecadunidademedida uni , ecadmarca marc , ecstmarcainsumo mins , ecadmarca cmarc
        join ecstinsumo ins on ins.CDINSUMO =  det.CDINSUMO and ins.CDUNIDADEMEDIDA = uni.CDUNIDADEMEDIDA and
                                ins.CDINSUMO = mins.CDINSUMO and mins.CDMARCA = cmarc.CDMARCA
            where ins.flativo = 'S' and det.flativo = 'S' and  uni.FLATIVO = 'S' and mins.FLATIVO = 'S' and cmarc.FLATIVO = 'S'



Obrigada,
Suenne

Suenne

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

03/08/2015

Olá Suenne!
Você está criando os JOIN entre as tabelas de forma errada, eles devem ser realizados entre as tabelas. Veja:
select ins.CDINSUMO,
       mins.CDINSUMO,
       ins.DEINSUMO,
       det.CDDETALHE,
       det.DEDETALHE,
       ins.CDUNIDADEMEDIDA,
       uni.CDUNIDADEMEDIDA,
       uni.DEUNIDADEMEDIDA,
       uni.DESIMBOLO,
       mins.CDMARCA,
       cmarc.CDMARCA,
       cmarc.DEMARCA,
       ins.flativo,
       det.flativo,
       uni.FLATIVO,
       mins.FLATIVO,
       cmarc.FLATIVO 
from ecstinsumo ins
inner join ecstdetalheinsumo det
on ins.CDINSUMO =  det.CDINSUMO
inner join ecadunidademedida uni
on ins.CDUNIDADEMEDIDA = uni.CDUNIDADEMEDIDA 
inner join ecstmarcainsumo mins
on ins.CDINSUMO = mins.CDINSUMO
inner join ecadmarca cmarc
on mins.CDMARCA = cmarc.CDMARCA
where ins.flativo = 'S'
and det.flativo = 'S'
and  uni.FLATIVO = 'S'
and mins.FLATIVO = 'S'
and cmarc.FLATIVO = 'S'
GOSTEI 0
Suenne

Suenne

03/08/2015

Boa tarde Marisiana,

primeiramente muito obrigada pela ajuda.

Veja o que retornou:

PLAN MERGE (SORT (JOIN (UNI NATURAL, INS INDEX (R_1056))), SORT (JOIN (CMARC NATURAL, MINS INDEX (R_1059))), SORT (DET NATURAL))


O que isso significa?

Obrigada.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

03/08/2015

Verifica se as ligações entre as tabelas então corretas, eu montei o SQL pela lógica mas não sei o que é Foreign Key e o que é Primary Key.

O correto seria a " Foreign Key = Primary Key ".

Pelo retorno que você postou, há índices criados para as tabelas, então você precisa observar quais são e fazer a ligação de todas as tabelas envolvidas...
GOSTEI 0
Suenne

Suenne

03/08/2015

Marisiana,

outro detalhe....o firebird tem alguma limitação para retornar uma grande quantidade de dados?

Ele começou a retornar os dados, porém durante o processo retornou o erro:

The following error(s) have ocurred: Out of memory

Obrigada.
GOSTEI 0
POSTAR