Vamos aprofundar um pouco a coisa : 

a) pra início de tudo, selectividade só é de interesse se (como é 
recomendado) a pessoa está usando otimização por Custo (CBO) , o 
cacareco velho do RBO é ** totalmente ** cego pra isso. E pra se usar 
CBO, ** não ** é necessário que OPTIMIZER_MODE seja CHOOSE, com 
certeza QUALQUER valor diferente de RULE (ie, CHOOSE, ou FIRST_ROWS, 
ou ALL_ROWS) também implica em CBO ==> DESDE QUE <== hajam 
estatísticas.

b) selectividade assim definida no manual "Oracle9i Database 
Performance Tuning Guide and Reference", cap. 1 - Introduction to the 
Optimizer :

"Selectivity
The first measure, selectivity, represents a fraction of rows from a 
row set. The row set can be a base table, a view, or the result of a 
join or a GROUP BY operator. The selectivity is tied to a query 
predicate, such as last_name = 'Smith', or a combination of 
predicates, such as last_name = 'Smith' AND job_type = 'Clerk'. A 
predicate acts as a filter that filters a certain number of rows from 
a row set. Therefore, the selectivity of a predicate indicates how 
many rows from a row set will pass the predicate test. Selectivity 
lies in a value range from 0.0 to 1.0. A selectivity of 0.0 means 
that no rows will be selected from a row set, and a selectivity of 
1.0 means that all rows will be selected."

OU seja, pra índice unique, de cara a proposta de usar o NUM_DISTINCT 
já não bate :

[EMAIL PROTECTED]:SQL>select UNIQUENESS,DISTINCT_KEYS, NUM_ROWS from 
dba_indexes where owner='SCOTT' and index_name='PK_EMP';

UNIQUENES      DISTINCT_KEYS           NUM_ROWS
--------- ------------------ ------------------
UNIQUE                    16                 16

==> no caso acima, pelo proposto a selectividade seria 16, e o manual 
acima citado nos diz que TEM que estar entre 0 e 1.0 !! A fórmula 
correta então é outra, é DISTINCT_KEYS / NUM_ROWS , no caso de índice 
unique dando 1 (ou seja, 100%), tipo :

[EMAIL PROTECTED]:SQL>select index_name, UNIQUENESS, DISTINCT_KEYS / 
NUM_ROWS selectivity, DISTINCT_KEYS, NUM_ROWS from dba_indexes where 
owner='SCOTT' and table_name='EMP';

INDEX_NAME                     UNIQUENES        SELECTIVITY      
DISTINCT_KEYS           NUM_ROWS
------------------------------ --------- ------------------ ----------
-------- ------------------
EMP_ENAME                      NONUNIQUE                  
1                 16                 16
IDX_DEPTNO_JOB                 
NONUNIQUE                 ,6                  9                 15
PK_EMP                         UNIQUE                     
1                 16                 16

Isso é muito bem explicado em 
http://www.akadia.com/services/ora_index_selectivity.html

c) não se falou em histogramas, mas quando se cita selectividade, 
isso TEM que vir a baila. É seguinte, b) mostra a estimativa que o 
CBO faz se não houver informação de quantas vezes a coluna se 
repete : se houver essa informação COM CERTEZA o cálculo do CBO vai 
ser MUITO MUITO mais próximo , pois ele VAI SABER (ou ao menos vai 
ter uma amostra significativa) não só do número de chaves distintas, 
MAS pra cada coluna quantas vezes se repete ou não , isso é o 
HISTOGRAMA.

[]s

 Chiappa
 
--- Em [email protected], "Rosiano Vieira de Sales" 
<[EMAIL PROTECTED]> escreveu
> Concordo,
>  
>         Mas se o Oracle for versao 9i ou superior "DIZEM" que o 
otimizador tem um algoritimo que verifica a seletividade de todas as 
colunas do índice para então definir o melhor metodo de acesso.
>  
> ex: se o índice X possui as colunas A e B respectivamente, digamos 
que apenas a coluna B tem boa seletividade então o otimizador 
verifica primeiro a A e depois a B para depois definir se vai usar ou 
não o índice.
>     Vale lembrar que nunca testei na pratica ...
>  
> Ah ... e as estátisticas devem estar devidamente coletadas.
> 
>       -----Mensagem original----- 
>       De: [email protected] em nome de Bruno 
>       Enviada: qui 01/09/2005 14:47 
>       Para: [email protected] 
>       Cc: 
>       Assunto: Re: [oracle_br] SELETIVIDADE INDEX
>       
>       
> 
>       Mas o Rosiano , e se fosse um index composto...
>       Ai essa query nÃf£o serviria...
>       NÃf£o achas?
>       
>       ----- Original Message -----
>       From: "Rosiano Vieira de Sales" <[EMAIL PROTECTED]>
>       To: <[email protected]>
>       Sent: Thursday, September 01, 2005 2:36 PM
>       Subject: RES: [oracle_br] SELETIVIDADE INDEX
>       
>       
>       Bruno,
>       
>                 execute a consulta abaixo e verifique a coluna 
NUM_DISTINCT, ela
>       irÃf¡ te mostrar a seletividade de todos os campos da 
tabela..... qto maior o
>       valor mais seletiva a coluna Ãf©.
>       
>       select TABLE_NAME,COLUMN_NAME,NUM_DISTINCT, NUM_NULLS
>       from DBA_TAB_COL_STATISTICS
>       where table_name = 'NOME DA TABELA' order by 3 desc
>       /
>                 Vale lembrar que o otimizador precisa ser CHOOSE.
>       
>       -----Mensagem original-----
>       De: [email protected] em nome de Bruno
>       Enviada: qui 01/09/2005 14:03
>       Para: [email protected]
>       Cc:
>       Assunto: [oracle_br] SELETIVIDADE INDEX
>       
>       
>       
>       Boa Tarde,
>       Alguem sabe de alguma maneira de ver a seletividade de um 
index  ( boa ou
>       ruim ) ??
>       AgradeÃffÃ,§o a atenÃffÃ,§ÃffÃ,£o
>       Obrigado
>       Bruno
>       
>       
>       
> 
        ______________________________________________________________
________
>       
>       HistÃffÃ,³rico: http://www.mail-
archive.com/[email protected]/
>       Falar com os Moderadores:([EMAIL PROTECTED])
>       Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar
> 
        ______________________________________________________________
________
>       Links do Yahoo! Grupos
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       [As partes desta mensagem que nÃf£o continham texto foram 
removidas]
>       
>       
>       
> 
        ______________________________________________________________
________
>       
>       HistÃf³rico: http://www.mail-
archive.com/[email protected]/
>       Falar com os Moderadores:([EMAIL PROTECTED])
>       Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar
> 
        ______________________________________________________________
________
>       Links do Yahoo! Grupos
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
>       
> 
        ______________________________________________________________
________
>       
>       HistÃf³rico: http://www.mail-
archive.com/[email protected]/
>       Falar com os Moderadores:([EMAIL PROTECTED])
>       Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar
> 
        ______________________________________________________________
________
>       Links do Yahoo! Grupos
>       
>       
>       
>       
>       
>       
>       
>       
>       
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]





______________________________________________________________________

Histórico: http://www.mail-archive.com/[email protected]/
Falar com os Moderadores:([EMAIL PROTECTED])
Dorian Anderson Soutto - Fernanda Damous - Alisson Aguiar 
______________________________________________________________________ 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a