Problemas de velocidade c/ firebird 1.5!!

Firebird

06/03/2005

Oi bom dia, estou com um probleminha tenho um cliente q tem um computar Duron 1.0 c/ 256 mb de ram e uma base de dados de funcionarios de 1473 dividito em 17 empresas esse mes de fevereiro foi a segundo processo q ele fez no meu sistema dando um total de 2946 registro na tabela folha só que ae deu um problema o relatório com a relação de funcionários do mes está mto lento ao ponto q na empresa 001 c/ apenas 38 funcionarios no mes 2005/02 ta levando em media 20 min para executar a sql no delphi o q pode ser isso? :roll:
essa eh a sql q eu to usando...
´SELECT D.ID3_SEC, D.ID3_DEPT, D.ID3_STOR, D.NM_STOR, D.STR_SL_STOR, ID5_FC_STOR, A.*, B.*, C.NM_FCAO, C.ID5_CBO, E.NM_T_VERB FROM FUNCAO C LEFT JOIN TIPO_VERBA E ON C.ID2_T_VERB = E.ID2_T_VERB, FOLHA_FUNCIONARIO B, FOLHA A , SETOR D WHERE A.STR_ID_MES = B.STR_ID_MES AND B.ID5_FCAO = C.ID5_FCAO AND A.TM_MES = B.TM_MES AND A.ID3_EMP = B.ID3_EMP AND A.ID7_FUNC = B.ID7_FUNC AND A.STR_ID_MES = ´200502´ AND A.ID3_EMP = ´001´ AND A.TM_MES = ´0´ AND A.STSF_FL IN (´C´,´F´) AND B.ID9_LTCA_FUNC = D.ID9_LTCA_STOR ORDER BY B.NM_FUNC

tempo para abrir essa sql no delphi 22´ e 30´´ e no ibexpert 23´ e 15´´

detalhe nenhum desses campos sao do tipo blob


Brunosh3

Brunosh3

Curtidas 0

Respostas

Brunosh3

Brunosh3

06/03/2005

Oi bom dia, estou com um probleminha tenho um cliente q tem um computar Duron 1.0 c/ 256 mb de ram e uma base de dados de funcionarios de 1473 dividito em 17 empresas esse mes de fevereiro foi a segundo processo q ele fez no meu sistema dando um total de 2946 registro na tabela folha só que ae deu um problema o relatório com a relação de funcionários do mes está mto lento ao ponto q na empresa 001 c/ apenas 38 funcionarios no mes 2005/02 ta levando em media 20 min para executar a sql no delphi o q pode ser isso? :roll: essa eh a sql q eu to usando... ´SELECT D.ID3_SEC, D.ID3_DEPT, D.ID3_STOR, D.NM_STOR, D.STR_SL_STOR, ID5_FC_STOR, A.*, B.*, C.NM_FCAO, C.ID5_CBO, E.NM_T_VERB FROM FUNCAO C LEFT JOIN TIPO_VERBA E ON C.ID2_T_VERB = E.ID2_T_VERB, FOLHA_FUNCIONARIO B, FOLHA A , SETOR D WHERE A.STR_ID_MES = B.STR_ID_MES AND B.ID5_FCAO = C.ID5_FCAO AND A.TM_MES = B.TM_MES AND A.ID3_EMP = B.ID3_EMP AND A.ID7_FUNC = B.ID7_FUNC AND A.STR_ID_MES = ´200502´ AND A.ID3_EMP = ´001´ AND A.TM_MES = ´0´ AND A.STSF_FL IN (´C´,´F´) AND B.ID9_LTCA_FUNC = D.ID9_LTCA_STOR ORDER BY B.NM_FUNC tempo para abrir essa sql no delphi 22´ e 30´´ e no ibexpert 23´ e 15´´ detalhe nenhum desses campos sao do tipo blob



ow galera brigado.. mas achei... quer dizer foi uma solução alternativa.. tirei o FireBird e instalei o interbase 6.0.1.0 pelo menos ta mais rapido da empresa 001 c/ 38 funcionarios ta levando 20 seg e da 016 c/ 881 funcionarios ta levendo 3 min jah melhorou bastante.. mas ainda acho ambos os bancos de dados mto lento mais isso eh coisa pra outro tópico... um abraço...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/03/2005

vc tem índices criados nessas tabelas?

analise o plano utilizado. sugiro que vc crie indices para aqueles campos utilizados em where´s ou relacionamentos.

uma outra dica: se vc tiver campos onde vc utiliza a função max(), crie índices em ordem decrescente para esse campo mais o campo que estará na condição de busca. por exemplo:
select max(valor) from tabela where codigo=X
crie um índice decrescente para os campos codigo e valor. o retorno será instantâneo.


GOSTEI 0
Brunosh3

Brunosh3

06/03/2005

vc tem índices criados nessas tabelas? analise o plano utilizado. sugiro que vc crie indices para aqueles campos utilizados em where´s ou relacionamentos. uma outra dica: se vc tiver campos onde vc utiliza a função max(), crie índices em ordem decrescente para esse campo mais o campo que estará na condição de busca. por exemplo: select max(valor) from tabela where codigo=X crie um índice decrescente para os campos codigo e valor. o retorno será instantâneo.


ow vlw pela dica.. mas o where ta ligado com os index das tabelas... o lance de instalar o interbase jah ajudou mto...

vlw..

e mais uma vez obrigado.!


GOSTEI 0
Brunosh3

Brunosh3

06/03/2005

vc tem índices criados nessas tabelas? analise o plano utilizado. sugiro que vc crie indices para aqueles campos utilizados em where´s ou relacionamentos. uma outra dica: se vc tiver campos onde vc utiliza a função max(), crie índices em ordem decrescente para esse campo mais o campo que estará na condição de busca. por exemplo: select max(valor) from tabela where codigo=X crie um índice decrescente para os campos codigo e valor. o retorno será instantâneo.


ow vlw pela dica.. mas o where ta ligado com os index das tabelas... o lance de instalar o interbase jah ajudou mto...

vlw..

e mais uma vez obrigado.!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

06/03/2005

eu estava reparando na sua instrução... veja se assim muda alguma coisa:

SELECT D.ID3_SEC, D.ID3_DEPT, D.ID3_STOR, D.NM_STOR, D.STR_SL_STOR, 
       ID5_FC_STOR, A.*, B.*, C.NM_FCAO, C.ID5_CBO, E.NM_T_VERB 
FROM FUNCAO C
LEFT JOIN TIPO_VERBA E on (C.ID2_T_VERB = E.ID2_T_VERB)
INNER JOIN FOLHA_FUNCIONARIO B on (B.ID5_FCAO = C.ID5_FCAO)
INNER JOIN FOLHA A on (A.STR_ID_MES = B.STR_ID_MES AND A.TM_MES = B.TM_MES
                       AND A.ID3_EMP = B.ID3_EMP AND A.ID7_FUNC = B.ID7_FUNC)
INNER JOIN SETOR D on (D.ID9_LTCA_STOR = B.ID9_LTCA_FUNC)
WHERE A.STR_ID_MES = ´200502´ AND A.ID3_EMP = ´001´
  AND A.TM_MES = ´0´ AND A.STSF_FL IN (´C´,´F´)
ORDER BY B.NM_FUNC 


ou assim:

SELECT D.ID3_SEC, D.ID3_DEPT, D.ID3_STOR, D.NM_STOR, D.STR_SL_STOR, 
       ID5_FC_STOR, A.*, B.*, C.NM_FCAO, C.ID5_CBO, E.NM_T_VERB 
FROM FOLHA A
INNER JOIN FOLHA_FUNCIONARIO B on (B.STR_ID_MES = A.STR_ID_MES AND B.TM_MES = A.TM_MES
                       AND B.ID3_EMP = A.ID3_EMP AND B.ID7_FUNC = A.ID7_FUNC)
INNER JOIN SETOR D on (D.ID9_LTCA_STOR = B.ID9_LTCA_FUNC)
LEFT JOIN FUNCAO C on (C.ID5_FCAO = B.ID5_FCAO)
LEFT JOIN TIPO_VERBA E on (E.ID2_T_VERB = C.ID2_T_VERB)
WHERE A.STR_ID_MES = ´200502´ AND A.ID3_EMP = ´001´
  AND A.TM_MES = ´0´ AND A.STSF_FL IN (´C´,´F´)
ORDER BY B.NM_FUNC


a primeira alternativa é somente uma melhor organização dos relacionamentos. a segunda é uma dica que andei lendo, onde informa que o ideal seria que as condições fossem baseadas na tabela principal da consulta (sinceramente, não sei até onde isso é verdade).

e, só reforçando o que eu já havia ´dito´: crie índices para os campos utilizados nos relacionamentos e também para aqueles utilizados no where. nota-se que a tabela B tam vários campos no seu relacionamento com a tabela A. crei indices para aqueles campos nas duas tabelas.


GOSTEI 0
Sremulador

Sremulador

06/03/2005

amigo qual a versão do fire que você esta utilizando...


GOSTEI 0
POSTAR