Oracle - Optimizar las consultas

Noviembre 2016



Oracle posee un optimizador interno que le permite optimizar el plan de ejecución de una consulta. A veces, las características de los datos de la base de datos cambian rápidamente, para que el optimizador (sus estadísticas) sean actualizadas. En este caso, los hints podrían ser de ayuda. Por ejemplo, sea hint el nombre de un hint, éste es incluido en una consulta como sigue:

SELECT /* + hint(table) */ column1, column2 FROM table WHERE condition;

Los hint (sugerencias) pueden ser clasificados de la siguiente manera:

1. hint para la optimización de resultados:

  • ALL_ROWS: normalmente es utilizado para procesos por lotes o los sistemas de almacenamiento de datos. ALL_ROWS indica al optimizador que utilice el mínimo de recursos para que devuelva el resultado completo.
  • FIRST_ROWS: el objetivo del optimizador es devolver la primera línea de la consulta en el menor tiempo posible.
  • CHOOSE: toma en cuenta las estadísticas si es que existen y utiliza el optimizador basado en costes.
  • RULE: le indica al optmizador que únicamente determine el plan de ejecución utilizando reglas estrictas sin tener en cuenta del contexto (estadísticas y costes de acceso) u otros hints en la consulta.

2. hints para el modo de acceso:

  • CLUSTER: indica al optimizador que obtenga los datos de una tabla clusterizada.
  • FULL: indica al optimizador una lectura completa de la tabla.
  • ROWID: indica al optimizador una lectura de la tabla por rowid
  • INDEX (index): fuerza el uso del índice "index"
  • INDEX para calcular el coste de cada índice disponible y utiliza el mejor.
  • INDEX_ASC, INDEX_COMBINE, INDEX_DESC, INDEX_FFS, INDEX_JOIN, NO_INDEX, HASH, AND_EQUAL.

3. hints para transformar consultas:


FACT, MERGE, NO_EXPAND, NO_EXPAND_GSET_TO_UNION, NO_FACT, NO_MERGE, NOREWRITE, REWRITE, STAR_TRANSFORMATION, USE_CONCAT.

4. hints para las operación de unión SQL:


DRIVING_SITE, HASH_AJ, HASH_SJ, LEADING, MERGE_AJ, MERGE_SJ, NL_AJ, NL_SJ, USE_HASH, USE_MERGE, USE_NL.

5. hints para la ejecución en paralelo:


NOPARALLEL, PARALLEL, NOPARALLEL_INDEX, PARALLEL_INDEX, PQ_DISTRIBUTE.

6. hints suplementarios:


ANTIJOIN, APPEND, BITMAP, BUFFER, CACHE, CARDINALITY, CPU_COSTING,DYNAMIC_SAMPLING, INLINE, MATERIALIZE, NO_ACCESS, NO_BUFFER, NO_MONITORING, NO_PUSH_PRED, NO_PUSH_SUBQ, NO_QKN_BUFF, NO_SEMIJOIN, NOAPPEND, NOCACHE, OR_EXPAND, ORDERED, ORDERED_PREDICATES, PUSH_PRED, USH_SUBQ, QB_NAME, RESULT_CACHE, SELECTIVITY, SEMIJOIN, SEMIJOIN_DRIVER, STAR, WAP_JOIN_INPUTS, USE_ANTI, USE_SEMI.


Consulta también :
El documento «Oracle - Optimizar las consultas» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.