Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Execução Lenta de Instruções


fajo

Pergunta

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 porque 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.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

fajo, não dá para opnar exatamente.

Mas, quanto a desempenho, há itens a serem observados, tais como existência ou não de índices, número de registros armazenados, complexidade das consultas SQL, ...

Visto que você fez a migração de Access para Firebird, por acaso você teria mantido os mesmos componentes de acesso e utilizou o driver ODBC para acessar o Firebird?

Uma dica, aparentemente seu campo doc_data_operacao é do tipo DATE (ou seja, armazena apenas a data). Se for, seria mais apropriado que você o camparace com CURRENT_DATE e não com CURRENT_TIMESTAMP (ambos guardam informações diferentes - timestamp armazena a hora também).

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...