Fórum Problemas de velocidade c/ firebird 1.5!! #49698
06/03/2005
0
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
Curtir tópico
+ 0Posts
06/03/2005
Brunosh3
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
06/03/2005
Emerson Nascimento
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
07/03/2005
Brunosh3
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
07/03/2005
Brunosh3
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
07/03/2005
Emerson Nascimento
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
15/03/2005
Sremulador
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)