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 |
|