 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Seg Ago 14, 2017 9:47 am Assunto: Relatório muito demorado |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Ago 14, 2017 10:20 am Assunto: |
|
|
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 |
|
 |
will_pacini Aprendiz

Registrado: Quarta-Feira, 5 de Janeiro de 2011 Mensagens: 214
|
Enviada: Seg Ago 14, 2017 10:40 am Assunto: |
|
|
| 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 |
|
 |
dinocesar Novato

Registrado: Segunda-Feira, 15 de Mai de 2017 Mensagens: 26
|
Enviada: Qui Ago 17, 2017 9:26 am Assunto: |
|
|
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 |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Ago 17, 2017 11:14 am Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|