Flavio, acho que voce não entendeu o que falei sobre usar o Índice, não
vou entrar no mérito do HINT pois cada um tem sua preferencia, vamos ao
A questão do hint não é preferência minha, é uma decisão de projeto do
PostgreSQL, logo, não é nada pessoal, é baseada na opinião de dezenas de
desenvolvedores.
https://wiki.postgresql.org/wiki/OptimizerHintsDiscussion
Logo, sua afirmativa é *errada* e o planejador do PostgreSQL
entendeu direitinho que o índice é bastante útil ali. Vamos tentar
para um dos outros times:
Ok, O PostgreSQL resolveu corretamente, de forma diferente da que eu
falei, pois usou o índice corretamente. Mas na verdade fazendo o ANALYSE
voce gerou um HISTOGRAMA, e no histograma tem a informação que o time
"VOCEM_de_assis" não é uma das colunas mais frequentes, conforme outro
colega postou.
A informação "VOCEM de Assis" é uma linha, não uma coluna.
O histograma não foi gerado por mim, isso é uma funcionalidade interna
do PostgreSQL, é feito automaticamente e sem intervenção do usuário ou
administrador.
O analyze feito manualmente apenas atualiza o histograma a força, mas o
PostgreSQL faz isso automaticamente de tempos em tempos através de outro
mecanismo.
Mas veja que eu mencionei que o SGBD "provavelmente" não utilizaria o
índice, mas é que não considerei que seria utilizado um HISTOGRAMA, se
soubesse disso não iria fazer esta " AFIRMAÇÃO", se voce não considerar
o uso de HISTOGRAMA, provavelmente aconteceria o que mencionei. Na
No exemplo que enviei, note que em momento algum fiz analyze. O banco
tomou todas as decisões sozinho.
Até onde sei, os bancos de dados sérios, o Oracle incluso, usam este
mecanismo por padrão.
Um resultado com uma cardinalidade imensa como a que você sugeriu só
pode, na minha visão, ter ajuda de um índice.
verdade esse cenário que você montou, não foi exatamente o que falei,
pois com um Histograma o OTIMIZADOR ja vai ter outra ação ao planejar a
query, diferente se fosse sem um histograma presente. Espero ter
esclarecido agora minha "afirmação".
Sem dados estatísticos não sei como um planejador trabalharia. Isso é
intrínseco aos bancos de dados modernos.
Algumas das aberrações que andam vendendo por aí como NoSQL que usam
índice B-Tree pra tudo como se fosse a resposta pra todas as consultas
do planeta, do universo e tudo mais, é que não precisam de histograma
algum, uma vez que o índice é sempre a opção. E é por isso que eles só
atendem alguns casos de uso e prefiro dizer que os NoSQL são bancos de
dados de uso específico.
O PostgreSQL é chamado de uso geral justamente porque ele atende muitos
casos diferentes de consultas, e o faz na maioria dos casos automaticamente.
William, por favor entenda, não há nada em particular contra você. Só
estamos pedindo para cuidar com afirmações baseadas em "acreditômetro"
como fez. Esta é uma excelente lista de discussão, tem boa frequência e
todos são muito bem vindos aqui para postar dúvidas, respostas e outras
discussões saudáveis e, normalmente, de altíssimo nível. Esta nossa aqui
é um bom compêndio de funcionamento interno de planejador, estatísticas
e outras disciplinas.
E se está vindo do planeta Oracle, seja muito bem vindo!
[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral