Problemas de velocidade c/ firebird 1.5!!
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
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
Curtidas 0
Respostas
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
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.
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
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
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
06/03/2005
eu estava reparando na sua instrução... veja se assim muda alguma coisa:
ou assim:
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.
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
06/03/2005
amigo qual a versão do fire que você esta utilizando...
GOSTEI 0