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 

Select tabela com 492.792 registros lenta

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


Registrado: Domingo, 9 de Setembro de 2012
Mensagens: 14

MensagemEnviada: Seg Jul 23, 2018 4:25 pm    Assunto: Select tabela com 492.792 registros lenta Responder com Citação

Olá pessoa, tudo bem?
Me deparei com um problema de performance em um BD com Firebird 2.5 que atingiu uma quantidade de registros que eu não esperava.
Tenho uma tabela de estoque onde registro todas as movimentações do produto. Essa tabela hoje está com 492.792 registros e a consulta com sumarização ficou muito lenta, levando até 2 min. Já criei índices ascendentes e descendentes, mas melhorou muito pouco.

Vou precisar lista o estoque por mês durante um ano específico.
Ex: JAN FEV MAR ABR MAI...
1000 525 458 855 255

Fiz um select simples e o mesmo demora muito.
[code=sql]
select prod_id,
(select first 1 estoq_atual from estoque where
ano = :ano and estoque.prod_id = produtos.prod_id order by estoq_id desc) as estoque
from produtos order by prod_id
[/code]

Resultado Local
Citação:


Adapted Plan
PLAN (ESTOQUE ORDER ESTOQUE_IDX7 INDEX (ESTOQUE_IDX3, ESTOQUE_IDX1)) PLAN (PRODUTOS ORDER PK_PRODUTOS)

------ Performance info ------
Prepare time = 15ms
Execute time = 44s 695ms
Avg fetch time = 3.724,58 ms
Current memory = 2.493.468
Max memory = 2.664.676
Memory buffers = 384
Reads from disk to cache = 591.568
Writes from cache to disk = 0
Fetches from cache = 868.070


Estrutura da Tabela
[code=sql]
CREATE TABLE ESTOQUE (
ESTOQ_ID INTEGER NOT NULL PRIMARY KEY,
PROD_ID INTEGER,
ESTOQ_DATA TIMESTAMP,
ESTOQ_ORIGEM VARCHAR(40),
ESTOQ_ANTERIOR NUMERIC(5,3) DEFAULT 0,
ESTOQ_ENTRADA NUMERIC(5,3) DEFAULT 0,
ESTOQ_SAIDA NUMERIC(5,3) DEFAULT 0,
ESTOQ_MIN NUMERIC(5,3) DEFAULT 0,
ESTOQ_MAX NUMERIC(5,3) DEFAULT 0,
ESTOQ_ATUAL COMPUTED BY (ESTOQ_ANTERIOR +ESTOQ_ENTRADA - ESTOQ_SAIDA),
USU_ID INTEGER,
ESTOQ_VENCIDOS NUMERIC(5,3) DEFAULT 0,
ESTOQ_AVARIA NUMERIC(5,3) DEFAULT 0,
ESTOQ_NFE NUMERIC(5,3) DEFAULT 0,
ESTOQ_REAL COMPUTED BY ((ESTOQ_AVARIA - ESTOQ_VENCIDOS) - ESTOQ_ATUAL),
LOJ_ID INTEGER,
ESTOQ_ACAO VARCHAR(60) COLLATE WIN_PTBR,
CUSTO NUMERIC(12,2) DEFAULT 0 ,
ESTOQ_DATE DATE,
ANO INTEGER,
MES INTEGER,
DIA INTEGER
);
[/code]

Alguém pode me dar um dica de como posso melhorar a performance?

Desde já agradeço.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Jul 24, 2018 9:58 am    Assunto: Responder com Citação

Bom dia,

Não sei se vou conseguir ajudar, mas você pode postar a composição dos índices existentes na tabela Estoque quando você executou a consulta e obteve aquele plano de execução?
Você pretende utilizar uma subquery para cada mes, adicionando também um filtro para o mes?
O campo Estoq_Date tem o mesmo conteúdo dos campos Ano, Mes e Dia? Se sim, pode existir mais de um registro com a mesma data?

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-alugar-guarulhos-residencial-casa
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