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 

Relatório muito demorado

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Seg Ago 14, 2017 9:47 am    Assunto: Relatório muito demorado Responder com Citação

Olá pessoal, tenho um relatório de vendas que demora muito para puxar todos os dados, já tentei dar uma melhorada no código mas tudo o que está no select eu preciso para mostrar na tela, gostaria de saber se existe outro meio de fazer esse relatório e deixar mais rápido,

Código:

     SQL.Add(' select                                         '+
                 ' Itens.Id_Venda,                                '+
                 ' Itens.Id_Produto,                              '+
                 ' Itens.Qtd,                                     '+
                 ' Itens.Valor_Vendido,                           '+
                 ' Itens.Deconto,                                 '+
                 ' Itens.Valor_Real,                              '+
                 ' Itens.Valor_Custo,                             '+
                 ' Prod.Nome as NomeProd,                         '+
                 ' Forne.Id_Fornecedor,                           '+
                 ' Forne.Nome as NomeForne,                       '+
                 ' Fabri.Id_Fabricante,                           '+
                 ' Fabri.Nome as NomeFabri,                       '+
                 ' Venda.Data,                                    '+
                 ' Venda.Id_Funcionario,                          '+
                 ' Venda.Vlr_Pago_Din,                            '+
                 ' Venda.Vlr_Pago_Deb,                            '+
                 ' Venda.Vlr_Pago_Cred,                           '+
                 ' Venda.Vlr_Pago_Ticket,                         '+
                 ' Venda.Vlr_Pago_Conv,                           '+
                 ' Venda.Vlr_Pago_Dev,                            '+
                 ' Secao.Nome as NomeSec,                         '+
                 ' Secao.Id_Secao,                                '+
                 ' Funci.Nome as NomeFunc                         '+
                 ' from Itens_Venda as Itens                      '+
                 ' inner join Venda as Venda                      '+
                 ' on Venda.Id_Venda = Itens.Id_Venda             '+
                 ' inner join Funcionario as Funci                '+
                 ' on Funci.Id_Funcionario = Venda.Id_Funcionario '+
                 ' inner Join Produto as Prod                     '+
                 ' on Prod.Id_Produto = Itens.Id_Produto          '+
                 ' inner Join Secao as Secao                      '+
                 ' on Secao.Id_Secao = Prod.Id_Secao              '+
                 ' inner Join Fornecedor as Forne                 '+
                 ' on Forne.Id_Fornecedor = Prod.Id_Fornecedor    '+
                 ' inner Join Fabricante as Fabri                 '+
                 ' on Fabri.Id_Fabricante = Prod.Id_Fabricante    '+
                 ' where Venda.Data between :DatIni and :DatFim   '+
                 ' and Venda.Devolucao = 0                        '+
                 ' order by Venda.Data                            ');
                 ParamByName('DatIni').AsDate := DateTimePicker1.Date;
                 ParamByName('DatFim').AsDate := DateTimePicker2.Date;
       end;


Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Ago 14, 2017 10:20 am    Assunto: Responder com Citação

Quantos registros esse select está retornando? e quanto tempo está levando o processamento?

Faz um teste também com o select abaixo, verifique se melhora um pouco
Código:
SELECT Itens.Id_Venda,
       Itens.Id_Produto,
       Itens.Qtd,
       Itens.Valor_Vendido,
       Itens.Deconto,
       Itens.Valor_Real,
       Itens.Valor_Custo,
       Prod.Nome as NomeProd,
       Forne.Id_Fornecedor,
       Forne.Nome as NomeForne,
       Fabri.Id_Fabricante,
       Fabri.Nome as NomeFabri,
       Venda.Data,
       Venda.Id_Funcionario,
       Venda.Vlr_Pago_Din,
       Venda.Vlr_Pago_Deb,
       Venda.Vlr_Pago_Cred,
       Venda.Vlr_Pago_Ticket,
       Venda.Vlr_Pago_Conv,
       Venda.Vlr_Pago_Dev,
       Secao.Nome as NomeSec,
       Secao.Id_Secao,
       Funci.Nome as NomeFunc
  FROM Venda
       INNER JOIN Funcionario Funci
       ON Venda.ID_Funcionario = Funci.ID_Funcionario
       INNER JOIN Itens_Venda Itens
       ON Venda.ID_Venda = Itens.ID_Venda
       INNER JOIN Produto Prod
       ON Itens.ID_Produto = Prod.ID_Produto
       INNER JOIN Secao
       ON Prod.ID_Secao = Secao.ID_Secao
       INNER JOIN Fabricante Fabri
       ON Prod.ID_Fabricante = Fabri.ID_Fabricante
       INNER JOIN Fornecedor Forne
       ON Prod.ID_Fornecedor = Forne.ID_Fornecedor
 WHERE Venda.Devolucao = 0
   AND Venda.Data BETWEEN :DatIni and :DatFim
 ORDER BY Venda.Data
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
will_pacini
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 5 de Janeiro de 2011
Mensagens: 214

MensagemEnviada: Seg Ago 14, 2017 10:40 am    Assunto: Responder com Citação

leo_cj escreveu:
Quantos registros esse select está retornando? e quanto tempo está levando o processamento?

Faz um teste também com o select abaixo, verifique se melhora um pouco
Código:
SELECT Itens.Id_Venda,
       Itens.Id_Produto,
       Itens.Qtd,
       Itens.Valor_Vendido,
       Itens.Deconto,
       Itens.Valor_Real,
       Itens.Valor_Custo,
       Prod.Nome as NomeProd,
       Forne.Id_Fornecedor,
       Forne.Nome as NomeForne,
       Fabri.Id_Fabricante,
       Fabri.Nome as NomeFabri,
       Venda.Data,
       Venda.Id_Funcionario,
       Venda.Vlr_Pago_Din,
       Venda.Vlr_Pago_Deb,
       Venda.Vlr_Pago_Cred,
       Venda.Vlr_Pago_Ticket,
       Venda.Vlr_Pago_Conv,
       Venda.Vlr_Pago_Dev,
       Secao.Nome as NomeSec,
       Secao.Id_Secao,
       Funci.Nome as NomeFunc
  FROM Venda
       INNER JOIN Funcionario Funci
       ON Venda.ID_Funcionario = Funci.ID_Funcionario
       INNER JOIN Itens_Venda Itens
       ON Venda.ID_Venda = Itens.ID_Venda
       INNER JOIN Produto Prod
       ON Itens.ID_Produto = Prod.ID_Produto
       INNER JOIN Secao
       ON Prod.ID_Secao = Secao.ID_Secao
       INNER JOIN Fabricante Fabri
       ON Prod.ID_Fabricante = Fabri.ID_Fabricante
       INNER JOIN Fornecedor Forne
       ON Prod.ID_Fornecedor = Forne.ID_Fornecedor
 WHERE Venda.Devolucao = 0
   AND Venda.Data BETWEEN :DatIni and :DatFim
 ORDER BY Venda.Data


Oi Leo, então, depende do período que o usuário seleciona no calendário, o usuário tem costume de ver o registro de venda diário, mensal e trimestral...

Diário demora uns 3min p/ mostrar tudo, mensal demora uns 8 min...

O movimento dele é grande então, por dia são uns 500 registros ou mais

Vou alterar por esse código para ver se melhora, volto com o retorno, obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
dinocesar
Novato
Novato


Registrado: Segunda-Feira, 15 de Mai de 2017
Mensagens: 26

MensagemEnviada: Qui Ago 17, 2017 9:26 am    Assunto: Responder com Citação

Somente com o select não dá pra identificar... qual é o banco de dados que está utilizando?

Quais são os índices dessas tabelas? Você está convertendo algum dado (exemplo, data para texto ou numero para texto)?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9100
Localização: Sinop-MT

MensagemEnviada: Qui Ago 17, 2017 11:14 am    Assunto: Responder com Citação

no MySQL tem o comando explain, q mostra como esta sendo executado o select, e quais indices estao sendo usados:

Código:
EXPLAIN SELECT ....

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
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
Página 1 de 1

 
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