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
