Evandro,

> From: Evandro Ricardo Silvestre <[EMAIL PROTECTED]>
> Subject: Re: [pgbr-geral] 2 cadastros em uma tabela
> To: Comunidade PostgreSQL Brasileira
> 
> > 90%?! Com certeza! "Cheio" é pouco, eu diria *entupido* de NULLs.
Qualquer
> > índice sobre um campo assim será quase sempre ignorado pelo otimizador.
> > Logo, toda a vez que você quiser consultar só os clientes, o servidor
vai
> > trazer para a memória os fornecedores também, só para despediçar CPU
e
> > disco ignorando-os. 
> Se eu condicionar a consultar para apenas *clientes* e tiver um indice 
> no campo que indica a categoria da entidade (o campo utilizado para 
> condicionar) vai continuar enchendo a memória com os fornecedores?

É muitíssimo provável (ou seja, para todos os casos práticos e realistas)
que sim. Isso vai depender do número de registros e da proporção
clientes/fornecedores da sua base. Se o número de clientes não for muito
pequeno em relação ao total (digamos, por exemplo, menos de 5% em uma base
não muito grande), o otimizador vai achar (com razão) que é mais vantajoso
ler a tabela inteira (seq scan) ao invés de catar, um por um, um monte de
registros do índice de clientes (nested loop). O limiar que vai fazer o
otimizador decidir entre a leitura completa e o uso do índice depende de
diversos fatores, como o número total de registros, tamanho dos registros,
número de registros no índice condicional, etc. 

Consulte o EXPLAIN da consulta usando sua modelagem e os dados da base de
produção para saber o que o servidor faz na sua base.

O que importa é que o otimizador vai escolher uma opção ou outra por um
excelente motivo e sua única opção para não desperdiçar disco e CPU à
toa e fazer uma boa modelagem.


Atenciosamente,

Mozart Hasse


_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a