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 

[resolvido] Performance Mestre Detalhe

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Sex Out 05, 2018 1:03 pm    Assunto: [resolvido] Performance Mestre Detalhe Responder com Citação

Amigos, uma pequena duvida neste cenário.

Tabela PEDIDOS é a mestre. Tabela ITENS é a detalhe

Essa tabela ITENS tem cerca de 10 mil registros e tende a crescer 100 registros por dia.

Ao acessar a tela, faço um select de todos os PEDIDOS do dia de hoje, o que me resulta em no maximo 60 registros.

A dúvida é como funciona essa relação mestre detalhe. O firebird entende que vai ter que varrer toda tabela ITENS cada vez que eu clicar em um PEDIDO?


Editado pela última vez por renanbg em Qua Out 10, 2018 7:42 am, num total de 1 vez
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: Sáb Out 06, 2018 1:22 pm    Assunto: Responder com Citação

Boa tarde,

Acho que vai depender muito da forma como você vai programar, principalmente de como vai estar a sua query utilizada para retornar os itens do banco de dados, se essa query vai ter um filtro para retornar somente os itens de determinado pedido ou não.
No banco de dados em si, acho que seria importante a tabela de itens ter uma foreign key referenciando a primary key da tabela de pedidos, pois com essa FK o BD não precisará varrer a tabela inteira para retornar somente os itens de um pedido.

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Seg Out 08, 2018 4:49 pm    Assunto: Responder com Citação

Boa tarde imex.

Obrigado pelo retorno.

Sim, tenho uma chave estrangeira na tabela itens que aponta para a chave primaria da tabela pedidos.

E o select é basicamente:

Código:
SELECT DATA, PEDIDO, CLIENTE, VALOR FROM PEDIDOS WHERE DATA =:HOJE


Posso ficar despreocupado?
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: Seg Out 08, 2018 5:37 pm    Assunto: Responder com Citação

Boa tarde,

Em relação a essa query sim, mas como está a query para retornar os itens? Ela filtra por pedido?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Seg Out 08, 2018 7:51 pm    Assunto: Responder com Citação

ahh, sim...

Na query filho(itens), tenho o seguinte

Código:
 Select * From ITENS where COD_PEDIDO = :codigo
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: Seg Out 08, 2018 8:36 pm    Assunto: Responder com Citação

Essa query de itens retorna somente os itens de um pedido e como existe a FK o BD não terá que varrer toda a tabela para retorna-los.
Voltando a query de pedidos, se ela não tiver um índice com o campo Data o BD provavelmente varrerá a tabela inteira para retornar os pedidos do dia, mas a princípio não acho necessária a criação desse índice, que inclusive pode ser criado posteriormente caso a performance venha a se tornar um problema.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Ter Out 09, 2018 10:50 am    Assunto: Responder com Citação

Bom dia imex.

Fico mais tranquilo.
Sobre a tabela pedidos, não tem indice.
Será que seria melhor criar esse indice?

Aproveitando o gancho. Na pesquisa de clientes, seria interessante criar um indice no campo nome?]

a query está assim:

Código:
select * from clientes where nome like ....
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 Out 09, 2018 6:20 pm    Assunto: Responder com Citação

Boa tarde,

Um índice pode ajudar na performance dependendo dos campos que fazem parte do índice e dos filtros e ordenação existentes na query, mas a existência do índice também consome recursos do BD para manutenção do mesmo quando registros são inseridos, alterados e excluídos.
Nesse caso da tabela de clientes onde imagino que a maior parte das pesquisas será por nome e eventualmente a ordenação também, acredito que o índice seria interassante.
Nos outros caso teria que verificar os demais filtros e etc, mas se está funcionando bem sem os índices e como eles podem ser criados depois sem que seja necessário fazer alterações na aplicação, acho que você pode deixar como está e eventualmente cria-los no futuro.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
renanbg
Colaborador
Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012
Mensagens: 1158

MensagemEnviada: Qua Out 10, 2018 7:41 am    Assunto: Responder com Citação

De fato o banco ainda é pequeno e roda em apenas 2 estações.
De momento não foi sentido o peso em pesquisas.

Obrigado pelas dicas.

Abraço.
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 -> Delphi 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