Pessoal,
Achei um link que explica uma situação que fiquei na dúvida, segue:
http://mportes.blogspot.com.br/2005/11/histograma-introduo.html
Imagine o seguinte exemplo: Na cidade de São Paulo o conjunto de torcedores de times de futebol é distribuído segundo a tabela abaixo:
torce_para count(*)
————– ———-
São Paulo 4.000.000
Corinthians 8.000.000
Palmeiras 6.000.000
Santos 2.000.000
VOCEM de Assis 8
Se existe um índice em torce_para e uma query pedir os torcedores do VOCEM de Assis, é muito provável que o Oracle fará full table scan.
Mas por que?
É muito mais barato para o Oracle fazer um FTS que um acesso a milhões de linhas do índice.
Mas existe só 8 torcedores do VOCEM, como assim milhões de linhas?
Então sem histograma a coleta de estatística para o índice será mais ou menos (total de linhas tabela) / (seletividade do índice) então 20 milhões / 5 = 4 milhões de registros aproximadamente por valor distinto no índice (Cálculo muito a grosso modo
Um colega, reproduziu o cenário no PostgreSQL e quando executou a query:
SELECT * FROM TORCEDORES WHERE TORCE_PARA = “VOCEM de Assis”
o PostgreSQL utilizou o indice certinho, segundo ele ao criar o indice já foi criado um HISTOGRAMA que já detalhou a distribuição dos dados na tabela. Entao o Otimizador ao elaborar o plano corretamente, utilizando o índice.
Minha questão é: ao criar um índice no Oracle, será que ele já cria um Histograma automaticamente? Pois se acontecer isso, esse cenário reportado no link, está incorreto… nao faz sentido.