dbTalk Databases Forums  

No utiliza el indice de la tabla al hacer una consulta

comp.databases.oracle.misc comp.databases.oracle.misc


Discuss No utiliza el indice de la tabla al hacer una consulta in the comp.databases.oracle.misc forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
s.hernandez@daisalux.com
 
Posts: n/a

Default No utiliza el indice de la tabla al hacer una consulta - 09-24-2003 , 03:41 AM






Hola!
Estoy un poco verde en el tema de optimizar consultas y a ver si
alguien puede echarme una mano. Tengo una tabla con una pk y un indice
a un campo. Cuando hago una consulta de la tabla no me utiliza el
indice y la consulta se realentiza, ya que la tabla tiene bastantes
registros. Hago un explain plan de la consulta y veo como no me casa
por el indice. Porque puede ser?

Reply With Quote
  #2  
Old   
Giovanni Azua
 
Posts: n/a

Default Re: No utiliza el indice de la tabla al hacer una consulta - 09-24-2003 , 05:56 AM






Hola,

Si el optimizer mode esta "seteado" a CHOOSE
or COST based entonces tienes que calcular histogramas
(compute statistics) en los indices que quieres
usar sino no te va a utilizar el indice.

ANALYZE TABLE <table_name> COMPUTE STATISTICS
FOR TABLE
FOR ALL INDEXED COLUMNS
FOR ALL INDEXES
/

or for complete schema:

begin
dbms_stats.gather_schema_stats(
ownname => 'AR',
options => 'GATHER AUTO',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 34
);
end;
/

method_opt tiene que ser un tin diferente para
que haga el computo de histogramas en todos los
indeces de la tabla.

Espero te ayude,
Saludos,
Giovanni

<s.hernandez (AT) daisalux (DOT) com> wrote

Quote:
Hola!
Estoy un poco verde en el tema de optimizar consultas y a ver si
alguien puede echarme una mano. Tengo una tabla con una pk y un indice
a un campo. Cuando hago una consulta de la tabla no me utiliza el
indice y la consulta se realentiza, ya que la tabla tiene bastantes
registros. Hago un explain plan de la consulta y veo como no me casa
por el indice. Porque puede ser?



Reply With Quote
  #3  
Old   
s.hernandez@daisalux.com
 
Posts: n/a

Default Re: No utiliza el indice de la tabla al hacer una consulta - 09-25-2003 , 03:07 AM



Gracias por la respuesta!!!

He analizado las tablas y ahora si que me utiliza el indice y la
consulta es mucho más rápida. La segunda opción que me das no se si es
parecida a la primera o no tiene nada que ver, a ver si le hecho un
vistazo.

begin
dbms_stats.gather_schema_stats(
ownname => 'AR',
options => 'GATHER AUTO',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 34
);
end;
/

method_opt tiene que ser un tin diferente para
que haga el computo de histogramas en todos los
indeces de la tabla.

Reply With Quote
  #4  
Old   
Giovanni Azua
 
Posts: n/a

Default Re: No utiliza el indice de la tabla al hacer una consulta - 09-26-2003 , 05:00 AM



La funcion dbms_stats.gather_schema_stats realiza
el computo de las estadisticas en el esquema
completo y no nada mas en una tabla.

El inconveniente de hacerlo manual es que cuando
hay muchos cambios en la tabla que has optimizado
(updates, deletes, inserts) tienes que volver a
rehacer el computo de las estadisticas o
histogramas.

Una variante aun mas inteligente es "setear" el
computo *automatico* de las estadisticas, Oracle
se encarga automaticamente de actualizar las
estadisticas cuando la tabla (o las tablas) lo
requiere:

http://www.interealm.com/technotes/stats.html

"Rather than performing serialized ANALYZE
statement on each and every application table,
whether they have changed or not, the DBA
can now use the DBMS_STATS package to collect
statistics on only those objects that have become
stale (more than 10% of the table data has changed)
and, where applicable, use parallelism to make the
analysis process more efficient."

Table level:

alter table <table_name> monitoring
/

Schema level:

exec dbms_stats.alter_schema_tab_monitoring('scott', true)
/

Database level:

exec
dbms_stats.alter_database_tab_monitoring(monitorin g=>true,sysobjs=>false)
/

Oracle will monitor DMLs and collect statistics
as required.

The dbms_stats package is very prefered over the old
ANALYZE TABLE COMPUTE STATISTICS because dbms_stats
is more efficient (parallelize).

<s.hernandez (AT) daisalux (DOT) com> wrote

Quote:
Gracias por la respuesta!!!

He analizado las tablas y ahora si que me utiliza el indice y la
consulta es mucho más rápida. La segunda opción que me das no se si es
parecida a la primera o no tiene nada que ver, a ver si le hecho un
vistazo.

begin
dbms_stats.gather_schema_stats(
ownname => 'AR',
options => 'GATHER AUTO',
estimate_percent => dbms_stats.auto_sample_size,
method_opt => 'for all columns size repeat',
degree => 34
);
end;
/

method_opt tiene que ser un tin diferente para
que haga el computo de histogramas en todos los
indeces de la tabla.



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.