| adriano_servitec Colaborador
 
  
 
 Registrado: Sexta-Feira, 30 de Janeiro de 2004
 Mensagens: 17618
 
 
 | 
			
				|  Enviada: Ter Ago 17, 2021 8:28 am    Assunto: |   |  
				| 
 |  
				| Depois de ter feito uma limpeza no banco fiz novos testes com 3 select's trazendo a mesma informação 
 Select 1
 
  	  | Código: |  	  | select conta.id
 , replace (conta.nome,  '  ', ' ') AS nome
 , coalesce(SUM(CAST(movconta.valor AS NUMERIC(15,2)) * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END), 0) valor
 from conta
 join movconta on conta.id = movconta.id_conta
 where conta.inativo = 0
 and movconta.tipo IN (0, 1)
 and movconta.status <> 30
 group by 1,2
 order by 2
 | 
 Resultado
 
  	  | Código: |  	  | Plan PLAN SORT (SORT (JOIN (CONTA INDEX (CONTA_IDX1), MOVCONTA INDEX (FK_MOVCONTA_REF_CONTA, IDX_MOV_TIPO, IDX_MOV_TIPO))))
 
 ------ Performance info ------
 Prepare time = 0ms
 Execute time = 1s 344ms
 Avg fetch time = 24,44 ms
 Current memory = 35.124.512
 Max memory = 105.393.768
 Memory buffers = 2.048
 Reads from disk to cache = 71
 Writes from cache to disk = 0
 Fetches from cache = 434.535
 | 
 
 Select 2
 
  	  | Código: |  	  | select conta.id
 ,replace (conta.nome,  '  ', ' ') AS nome
 ,(select
 coalesce(SUM(CAST(movconta.valor AS NUMERIC(15,2)) * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END), 0)
 from movconta
 where conta.id = movconta.id_conta
 and movconta.tipo IN (0, 1)
 and movconta.status <> 30
 ) AS valor
 from conta
 where conta.inativo = 0
 ORDER BY conta.nome
 | 
 Resultado
 
  	  | Código: |  	  | Plan PLAN (MOVCONTA INDEX (FK_MOVCONTA_REF_CONTA, IDX_MOV_TIPO, IDX_MOV_TIPO))
 PLAN (CONTA ORDER IDXNOMECONTA INDEX (CONTA_IDX1))
 
 ------ Performance info ------
 Prepare time = 0ms
 Execute time = 625ms
 Avg fetch time = 11,36 ms
 Current memory = 35.171.592
 Max memory = 105.393.768
 Memory buffers = 2.048
 Reads from disk to cache = 190
 Writes from cache to disk = 0
 Fetches from cache = 434.588
 
 | 
 
 Select 3
 
  	  | Código: |  	  | select conta.id
 ,replace (conta.nome,  '  ', ' ') AS nome
 , m.valor
 from conta
 join (select movconta.id_conta,
 coalesce(SUM(CAST(movconta.valor AS NUMERIC(15,2)) * CASE WHEN movconta.tipo in (0, 3) THEN 1 ELSE -1 END), 0) valor
 from movconta
 where movconta.tipo IN (0, 1)
 and movconta.status <> 30
 group by movconta.id_conta) m on m.id_conta = conta.id
 where conta.inativo = 0
 ORDER BY conta.nome
 
 | 
 Resultado
 
  	  | Código: |  	  | Plan PLAN SORT (JOIN (M MOVCONTA ORDER FK_MOVCONTA_REF_CONTA INDEX (IDX_MOV_TIPO, IDX_MOV_TIPO), CONTA INDEX (PK_CONTA)))
 
 ------ Performance info ------
 Prepare time = 0ms
 Execute time = 359ms
 Avg fetch time = 6,53 ms
 Current memory = 35.352.240
 Max memory = 105.393.768
 Memory buffers = 2.048
 Reads from disk to cache = 130
 Writes from cache to disk = 0
 Fetches from cache = 646.050
 
 | 
 
 No final o melhor que se saiu foi o select de numero 3. Percebi que a forma que escreve o select modifica muito a performance. Sinal que preciso aprender muito mais sobre banco de dados.
 
 Porém descobri que meu cliente usa o banco em nuvem, por isso demora mais.
 
 Não tenho muito mais o que fazer eu acho. Acho que o problema pode estar na estrutura dele lá.
 _________________
 Jogo seu smartphone? Acesse o link e confira.
 https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
 https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
 |  |