Sergio, é por isso mesmo que eu perguntei no e-mail anterior qual era a
quantidade total de linhas dessa tabela!

De repente é por isso que o índice não esteja sendo utilizado.


Em 3 de fevereiro de 2014 17:24, Sérgio Luiz Rodrigues Chaves <
sergio.cha...@elumini.com.br> escreveu:

>
>
> Yuri,
>
> Veja também em http://www.devmedia.com.br/tuning-no-oracle-parte-02/16297.
> Nota 4
>
> "Nota 4. Seletividade de uma consulta
>
> Podemos chamar seletividade como sendo a relação estabelecida entre a
> quantidade de linhas de uma tabela retornadas por uma consulta com a
> quantidade total de linhas da mesma tabela. É exatamente através da análise
> dessa seletividade que o Oracle decide entre usar um índice ou varrer todos
> os blocos de uma tabela. Por exemplo, imaginemos uma tabela com 1 milhão de
> linhas: se uma consulta na mesma retorna 900 mil linhas é muito mais rápido
> o Oracle varrer a tabela toda do que utilizar um índice. Apenas para termos
> um parâmetro, qualquer seletividade acima de 10% do valor total de linhas
> de uma tabela é considerada alta, e dificilmente o Oracle utilizará um
> índice nessa consulta.".
>
> Atenciosamente,
>
> Sérgio Chaves .
>
> ----- Mensagem original -----
> De: Sérgio Luiz Rodrigues Chaves <sergio.cha...@elumini.com.br>
> Para: oracle br <oracle_br@yahoogrupos.com.br>
> Enviadas: Mon, 03 Feb 2014 14:26:40 -0200 (BRST)
> Assunto: Re: [oracle_br] Índices no Oracle
>
>
> Yuri,
>
> É importante informar qual a sua versão de Banco de Dados. Há muitas
> mudança significativas entre elas:
> "Features
> Index fast full scan
> Consideration of bitmap access to paths for tables with only B-tree indexes
> Complex view merging
> Peeking into user-defined bind variables
> Index joins
> Dynamic sampling
> Query rewrite enables
> Skip unusable indexes
> Automatically compute index statistics as part of creation
> Cost-based query transformations
> Allow rewrites with multiple MVs and/or base tables
> Adaptive cursor sharing
> Use extended statistics to estimate selectivity
> Use native implementation for full outer joins
> Partition pruning using join filtering
> Group by placement optimization
> Null aware antijoins "
> As 6 últimas somente no Oracle 11g.
>
> Também é importante saber se o Banco de dados foi configurado para OLAP ou
> OLTP, visto que o otimizador e os parameters do banco são diferentes para
> cada um deles.
>
> Verifique também se as estatísticas da tabela estão sendo coletadas.
>
> Nos passe o plano de execução e as informações:
> Selectivity = Number of rows satisfying a condition / Total number of rows
> "Selectivity is the estimated proportion of a row set retrieved by a
> particular predicate or combination of predicates.
> It is expressed as a value between 0.0 and 1.0:
> High selectivity: Small proportion of rows
> Low selectivity: Big proportion of rows
> Selectivity computation:
> If no statistics: Use dynamic sampling
> If no histograms: Assume even distribution of rows
> Statistic information:
> DBA_TABLES and DBA_TAB_STATISTICS (NUM_ROWS)
> DBA_TAB_COL_STATISTICS (NUM_DISTINCT, DENSITY, HIGH/LOW_VALUE,...)
> "
> Cardinality = Selectivity * Total number of rows
>
> Expected number of rows retrieved by a particular operation in the
> execution plan
> Vital figure to determine join, filters, and sort costs
> Simple example:
>
> SELECT days FROM courses WHERE dev_name = 'ANGEL';
>
> The number of distinct values in DEV_NAME is 203.
> The number of rows in COURSES (original cardinality) is 1018.
> Selectivity = 1/203 = 4.926*e-03
> Cardinality = (1/203)*1018 = 5.01 (rounded off to 6)
>
> Att.
>
> Sérgio Chaves.
>
> ----- Original Message -----
> From: "Yuri Menon" <yuri.me...@gmail.com>
> To: "oracle br" <oracle_br@yahoogrupos.com.br>
> Sent: Segunda-feira, 3 de Fevereiro de 2014 13:22:14
> Subject: [oracle_br] Índices no Oracle
>
> Boa tarde pessoal!
>
> Podem me auxiliar por favor?
>
> A seguinte consulta:
>
> SELECT *
> FROM TMOV
> WHERE CODCXA = '12345'
>
> Retorna 3500 registros e está muito lenta.
>
> Em conta disso, criei um índice que aponta para TMOV.CODCXA
>
> No entanto, esse índice só é utilizado quando dou APENAS um:
> SELECT CODCXA FROM TMOV WHERE CODCXA = '12345'
> não é utilizado para:
> SELECT * FROM TMOV WHERE CODCXA = '12345'
>
> A minha dúvida:
> É normal isso no Oracle?
>
> Se eu quiser fazer SELECT * terei de criar um índice que "enxergue" todos
> os campos?
>
> Obs: tentei passar com HINT pra tentar "forçar", mas não foi.
>
> Desde já agradeço!
>
>  
>

Responder a