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! > > >