Opa, então : na verdade, é Documentado que a partir da versão 10g iirc (vide 
manual SQL Reference no comando CREATE INDEX) que automaticamente após a 
criação de um índice o RDBMS coleta estatísticas NO ÍNDICE, mas na tabela isso 
não ocorre, e o histograma é uma Atribuição em princípio DA TABELA, ok ? Via de 
regra, o índice é consulta com a Chave completa, então óbvio que a 
cardinalidade do índice em si em tese é 1, a chave completa vai trazer um e 
apenas um registro...
 Também é Documentado que :

 - caso não haja estatísticas para uma tabela, o RDBMS pode fazer uma coleta 
por conta - a profundidade desse sample automático é Gerenciada no parâmetro 
optimizer_dynamic_sampling

 - por default, se o DBA não opor nada, o RDBMS Oracle agenda uma coleta 
Automática de estatísticas nas tabelas todas para a janela de manutenção, que 
normalmente é à noite 

==> assim, se tudo está default, caso o DBA se esqueça de fazer uma coleta na 
tabela , na próxima janela de manutenção o RDBMS faz uma coleta default, E 
enquanto isso não ocorre o otimizador tenta fazer coletas simplificadas se a 
tabela não tiver estatísticas coletadas ainda...

 Um exemplo curto mostrando a não-criação :

-> crio a tabela e um índice :

SYSTEM:@O11GR2:SQL>create table TAB_TEST_STAT (c1 number);

Tabela criada.

SYSTEM:@O11GR2:SQL>insert into TAB_TEST_STAT values (1);

1 linha criada.

SYSTEM:@O11GR2:SQL>create index IDX_TEST_STAT on TAB_TEST_STAT(c1);

Índice criado.

=> resultado ref. estatísticas : tabela NÂO as tem, índice tem :

SYSTEM:@O11GR2:SQL>select last_analyzed from user_tables where 
table_name='TAB_TEST_STAT';

LAST_ANA
--------


SYSTEM:@O11GR2:SQL>select last_analyzed from user_indexes where 
table_name='TAB_TEST_STAT';

LAST_ANA
--------
05/08/14

==> mas de Histogramas, neca, ATÉ PORQUE histogramas são em princípio atributo 
da tabela :

SYSTEM:@O11GR2:SQL>select column_name, num_distinct, density, num_nulls, 
num_buckets, histogram
  2    from user_tab_col_statistics
  3   where table_name ='TAB_TEST_STAT';

nao há linhas selecionadas

SYSTEM:@O11GR2:SQL>select * from user_histograms where 
table_name='TAB_TEST_STAT';

nao há linhas selecionadas


==> coleto : 

SYSTEM:@O11GR2:SQL>exec dbms_stats.gather_table_stats(ownname=>'SYSTEM', 
tabname=>'TAB_TEST_STAT', cascade=>TRUE,estimate_percent=>null, 
method_opt=>'FOR ALL COLUMNS SIZE AUTO');

Procedimento PL/SQL concluído com sucesso.

=> aí estão presentes - OBVIAMENTE, esse histograma é de size mínimo, 
normalmente Inapropriado, mas está aqui  :

SYSTEM:@O11GR2:SQL>select * from user_histograms where 
table_name='TAB_TEST_STAT';

TABLE_NAME                     COLUMN_NAME                    ENDPOINT_NUMBER 
ENDPOINT_VALUE
------------------------------ ------------------------------ --------------- 
--------------
ENDPOINT_ACTUAL_VALUE
---------------------------------------------------------------------------------------------------------------------------------
TAB_TEST_STAT                  C1                                           0   
           1


TAB_TEST_STAT                  C1                                           1   
           1



SYSTEM:@O11GR2:SQL>

SYSTEM:@O11GR2:SQL>select last_analyzed from user_tables where 
table_name='TAB_TEST_STAT';

LAST_ANA
--------
05/08/14

Responder a