ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Performance no select firebird?
Ir à página Anterior  1, 2
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Ter Ago 17, 2021 8:28 am    Assunto: Responder com Citação

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
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página Anterior  1, 2
Página 2 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB