Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rosalvo Neto

Como melhorar o tempo desta query ?

Recommended Posts

Pessoal,

Boa Tarde! :rolleyes:

 

Estou com o seguinte problema...

 

Preciso diminuir o tempo desta Query que abre um relatório de folha de pagamento.

 

Meu conhecimento em SQL ainda é pouco e ja cheguei no máximo que consegui diminuir. Esta rodando em 33 segundos atualmente. Servidor de testes é um Celeron 2.4 com 512 MB de memória. SQL 2000 Server.

 

Esta é a Query

SELECT DISTINCT 
				FPG_RELATORIO_FOLHA_VI_1.ACU_VALOR, 
				FPG_RELATORIO_FOLHA_VI_1.AGE_COD, 
				FPG_RELATORIO_FOLHA_VI_1.AGE_DIGITO, 
				FPG_RELATORIO_FOLHA_VI_1.AGE_NUMERO, 
				FPG_RELATORIO_FOLHA_VI_1.ANO_COD, 
				FPG_RELATORIO_FOLHA_VI_1.BAN_COD, 
				FPG_RELATORIO_FOLHA_VI_1.BAN_NOME, 
				FPG_RELATORIO_FOLHA_VI_1.CEN_COD, 
				FPG_RELATORIO_FOLHA_VI_1.CEN_DS, 
				FPG_RELATORIO_FOLHA_VI_1.EVE_COD, 
				FPG_RELATORIO_FOLHA_VI_1.EVE_NOME, 
				FPG_RELATORIO_FOLHA_VI_1.EVE_TIPO, 
				FPG_RELATORIO_FOLHA_VI_1.FOL_NUMERO, 
				FPG_RELATORIO_FOLHA_VI_1.FUN_ADM_DATA, 
				FPG_RELATORIO_FOLHA_VI_1.FUN_CONTA_PAG, 
				FPG_RELATORIO_FOLHA_VI_1.FUN_CONTA_PAG_DV, 
				FPG_RELATORIO_FOLHA_VI_1.FUN_MATRICULA, 
				FPG_RELATORIO_FOLHA_VI_1.MES_COD, 
				FPG_RELATORIO_FOLHA_VI_1.MES_NOME, 
				FPG_RELATORIO_FOLHA_VI_1.PES_NOME, 
				FPG_RELATORIO_FOLHA_VI_1.PFI_CPF, 
				FPG_RELATORIO_FOLHA_VI_1.REG_DS, 
				FPG_RELATORIO_FOLHA_VI_1.TFO_DS, 
				FPG_RELATORIO_FOLHA_VI_1.TPS_COD, 
				FPG_RELATORIO_FOLHA_VI_1.TPS_DS, 
				FPG_RELATORIO_FOLHA_VI_1.UNI_NOME, 
				FPG_RELATORIO_FOLHA_VI_1.VIN_COD, 
				FPG_RELATORIO_FOLHA_VI_1.ACU_QUANTITATIVO, 
				FPG_RELATORIO_FOLHA_VI_1.VAL_PROVENTO, 
				FPG_RELATORIO_FOLHA_VI_1.VAL_DESCONTO, 
				FPG_RELATORIO_FOLHA_VI_1.LIQUIDO, 
				FPG_CARGO_1.CAR_DS, 
				GER_CENTRO_CUSTO_1.CEN_COD CEN_COD_2, 
				TC_REGIME_1.REG_DS REG_DS_2, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 552) SELECT_ACU_VALOR_FROM_FP, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 550) SELECT_ACU_VALOR_FROM_F_2, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 450) SELECT_ACU_VALOR_FROM_F_3, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 550) SELECT_ACU_VALOR_FROM_F_4, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 552) SELECT_ACU_VALOR_FROM_F_5, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 30) SELECT_ACU_VALOR_FROM_F_6, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 501) SELECT_ACU_VALOR_FROM_F_7, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 29) SELECT_ACU_VALOR_FROM_F_8, 
				(SELECT ACU_VALOR FROM FPG_ACUMULO A WHERE A.FOL_COD =  FPG_RELATORIO_FOLHA_VI_1.FOL_COD AND A.FUN_COD = FPG_RELATORIO_FOLHA_VI_1.FUN_COD AND A.EVE_COD = 3) SELECT_ACU_VALOR_FROM_F_9

FROM 
	 FPG_RELATORIO_FOLHA_VI FPG_RELATORIO_FOLHA_VI_1
	  INNER JOIN GER_CENTRO_CUSTO GER_CENTRO_CUSTO_1 ON (GER_CENTRO_CUSTO_1.CEN_COD = FPG_RELATORIO_FOLHA_VI_1.CEN_COD)
	  INNER JOIN GER_ANO GER_ANO_1 ON  (GER_ANO_1.ANO_COD = FPG_RELATORIO_FOLHA_VI_1.ANO_COD)
	  INNER JOIN GER_MES GER_MES_1 ON   (GER_MES_1.MES_COD = FPG_RELATORIO_FOLHA_VI_1.MES_COD)
	  INNER JOIN FPG_TIPO_FOLHA FPG_TIPO_FOLHA_1 ON (FPG_TIPO_FOLHA_1.TFO_COD = FPG_RELATORIO_FOLHA_VI_1.TFO_COD)
	  INNER JOIN FPG_ACUMULO FPG_ACUMULO_1 ON (FPG_ACUMULO_1.ACU_COD = FPG_RELATORIO_FOLHA_VI_1.ACU_COD)
	  INNER JOIN GER_FUNCIONARIO GER_FUNCIONARIO_1 ON (GER_FUNCIONARIO_1.FUN_COD = FPG_ACUMULO_1.FUN_COD)
	  INNER JOIN RAIS_VINCULO RAIS_VINCULO_1 ON (RAIS_VINCULO_1.VIN_COD = GER_FUNCIONARIO_1.VIN_COD)
	  INNER JOIN FPG_CARGO FPG_CARGO_1 ON (FPG_CARGO_1.CAR_COD = GER_FUNCIONARIO_1.CAR_COD_EFE)
	  INNER JOIN TC_REGIME TC_REGIME_1 ON  (TC_REGIME_1.REG_COD = GER_FUNCIONARIO_1.REG_COD)
	  LEFT OUTER JOIN GER_AGENCIA GER_AGENCIA_1 ON (GER_AGENCIA_1.AGE_COD = GER_FUNCIONARIO_1.AGE_COD_PAG)
	  left JOIN GER_BANCO GER_BANCO_1 ON  (GER_BANCO_1.BAN_COD = GER_AGENCIA_1.BAN_COD)
	  INNER JOIN GER_UNIDADE GER_UNIDADE_1 ON (GER_UNIDADE_1.UNI_COD = FPG_RELATORIO_FOLHA_VI_1.UNI_COD)

WHERE ( FPG_RELATORIO_FOLHA_VI_1.EVE_TIPO <> 'B' ) 
	  AND ( FPG_TIPO_FOLHA_1.TFO_COD <> 6 )
ORDER BY FPG_RELATORIO_FOLHA_VI_1.UNI_NOME, 
		 FPG_RELATORIO_FOLHA_VI_1.CEN_DS, 
		 FPG_RELATORIO_FOLHA_VI_1.PES_NOME, 
		 FPG_RELATORIO_FOLHA_VI_1.FUN_MATRICULA, 
		 FPG_RELATORIO_FOLHA_VI_1.EVE_TIPO DESC, 
		 FPG_RELATORIO_FOLHA_VI_1.EVE_COD
Será que tem como diminuir mais este tempo ?

 

Abração !

Compartilhar este post


Link para o post
Compartilhar em outros sites

estude esse post e seus sub-links: http://forum.imasters.com.br/index.php?showtopic=224850

 

outra coisa, esse subselect que você faz toda hora com a tabela FPG_ACUMULO, deixa essa tabela como virtual somente com os registros que estão com os codigos que você esta usando fixo no campo EVE_COD

 

caso precisar este tópico mostra como criar uma tabela virtual: http://forum.imasters.com.br/index.php?showtopic=224865

 

neste tópico esse assunto tb. esta sendo discutido: http://forum.imasters.com.br/index.php?showtopic=253778

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi ERiva, Muito o obrigado,

 

Consegui fazer umas coisinhas a mais.

 

Quanto a criar a tabela virtual, não tenho como fazer.

 

Uso a IDE Maker ALL para desenvolver esta aplicação e ele não permite alterar diretamente o código SQL que ele trabalha.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, se possivel, então passa essas "coisinhas a mais" que tu fez pra comunidade, talvez possa vir ajudar alguem no futuro e tb. o quanto de performance tu ganhou

 

abs

t++

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.