Execução Lenta de Instruções
Olá,
recentemente fiz uma migração num sistema feito com access para firebird e estou enfrentando problemas de lentidão em várias instruções SQL, como poderão ver algumas delas são idênticas, tirando é claro as particularidades do BD e por isso não entendo pq a diferença de tempo.
Seguem algumas instruções:
No Firebird:
1.
INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento)
SELECT Doc_Doa_Id, 10 AS Motivo, current_date AS Data, 937 AS Usuario, Doc_Id
FROM Tab_Doacoes
WHERE (current_timestamp - doc_data_operacao)>60
AND Doc_Func_Operadora = 937
AND Doc_Status_Doacao=2
2.
DELETE FROM Tab_Doacoes
WHERE (current_timestamp - doc_data_operacao)>60 AND Doc_Func_Operadora = 937 AND Doc_Status_Doacao=2
3.
SELECT Tab_Doadores.Doa_Id
FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id
WHERE Tab_Doacoes.Doc_Func_Operadora=937 AND Tab_Doacoes.Doc_Status_Doacao=2 AND Tab_Doadores.Doa_Status=´A´
GROUP BY Tab_Doadores.Doa_Id
HAVING Count(*)<3
No Access:
1.
INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento)
SELECT Tab_Doacoes.Doc_Doa_Id, 10 AS Motivo, Now() AS Data, 937 AS Usuario, Tab_Doacoes.Doc_Id
FROM Tab_Doacoes
WHERE ((Now()-[doc_data_operacao])>60)
AND (Tab_Doacoes.Doc_Func_Operadora)= 937
AND (Tab_Doacoes.Doc_Status_Doacao)=2)
2.
DELETE * FROM Tab_Doacoes
WHERE ((Now()-[doc_data_operacao])>60) AND (Tab_Doacoes.Doc_Func_Operadora = 937) AND (Tab_Doacoes.Doc_Status_Doacao=2)
3.
SELECT Tab_Doadores.Doa_Id
FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id
WHERE (Tab_Doacoes.Doc_Func_Operadora=937) AND (Tab_Doacoes.Doc_Status_Doacao=2) AND (Tab_Doadores.Doa_Status=´A´)
GROUP BY Tab_Doadores.Doa_Id
HAVING (Count(*)<3)
no Firebird essas 3 instruções levam em média 3,5 segundos para serem executadas e no Access, no máximo 1,5, isso localmente.
E está acontecendo essa lentidão com várias outras instruções;
o que há de errado?
Devo observar q tenho outros sistemas no mesmo pc q rodam normalmente no Firebird.
recentemente fiz uma migração num sistema feito com access para firebird e estou enfrentando problemas de lentidão em várias instruções SQL, como poderão ver algumas delas são idênticas, tirando é claro as particularidades do BD e por isso não entendo pq a diferença de tempo.
Seguem algumas instruções:
No Firebird:
1.
INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento)
SELECT Doc_Doa_Id, 10 AS Motivo, current_date AS Data, 937 AS Usuario, Doc_Id
FROM Tab_Doacoes
WHERE (current_timestamp - doc_data_operacao)>60
AND Doc_Func_Operadora = 937
AND Doc_Status_Doacao=2
2.
DELETE FROM Tab_Doacoes
WHERE (current_timestamp - doc_data_operacao)>60 AND Doc_Func_Operadora = 937 AND Doc_Status_Doacao=2
3.
SELECT Tab_Doadores.Doa_Id
FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id
WHERE Tab_Doacoes.Doc_Func_Operadora=937 AND Tab_Doacoes.Doc_Status_Doacao=2 AND Tab_Doadores.Doa_Status=´A´
GROUP BY Tab_Doadores.Doa_Id
HAVING Count(*)<3
No Access:
1.
INSERT INTO Tab_Historicos_Doadores ( Hdo_Doa_Id, Hdo_Tmh_Id, Hdo_Dt, Hdo_Fun_Id, Hdo_Complemento)
SELECT Tab_Doacoes.Doc_Doa_Id, 10 AS Motivo, Now() AS Data, 937 AS Usuario, Tab_Doacoes.Doc_Id
FROM Tab_Doacoes
WHERE ((Now()-[doc_data_operacao])>60)
AND (Tab_Doacoes.Doc_Func_Operadora)= 937
AND (Tab_Doacoes.Doc_Status_Doacao)=2)
2.
DELETE * FROM Tab_Doacoes
WHERE ((Now()-[doc_data_operacao])>60) AND (Tab_Doacoes.Doc_Func_Operadora = 937) AND (Tab_Doacoes.Doc_Status_Doacao=2)
3.
SELECT Tab_Doadores.Doa_Id
FROM Tab_Doadores INNER JOIN Tab_Doacoes ON Tab_Doadores.Doa_Id = Tab_Doacoes.Doc_Doa_Id
WHERE (Tab_Doacoes.Doc_Func_Operadora=937) AND (Tab_Doacoes.Doc_Status_Doacao=2) AND (Tab_Doadores.Doa_Status=´A´)
GROUP BY Tab_Doadores.Doa_Id
HAVING (Count(*)<3)
no Firebird essas 3 instruções levam em média 3,5 segundos para serem executadas e no Access, no máximo 1,5, isso localmente.
E está acontecendo essa lentidão com várias outras instruções;
o que há de errado?
Devo observar q tenho outros sistemas no mesmo pc q rodam normalmente no Firebird.
Fajo
Curtidas 0
Respostas
Sremulador
12/01/2008
seus campos estão indexados ?
GOSTEI 0
Fajo
12/01/2008
Agora estao sim, problema resolvido! era só falta dos indices, obrigado!!
GOSTEI 0