Hints Oracle: optimizar consultas, parallel, ejemplo...

Hints Oracle: optimizar consultas, parallel, ejemplo...

Oracle posee un optimizador interno que le permite perfeccionar el plan de ejecución de una consulta. A veces, las características de la base de datos cambian de manera tan rápida que las estadísticas de este optimizador no llegan a ser actualizadas. En tal caso, los hints podrían ser de ayuda.

¿Qué son los hints?

Estos no son más que parámetros que se sitúan después del comando SELECT y que indican al optimizador de Oracle cómo actuar.

¿Qué hints existen para la optimización de resultados?

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

¿Qué hints existen para el modo de acceso?

  1. CLUSTER: indica al optimizador que obtenga los datos de una tabla clusterizada.
  2. FULL: indica al optimizador una lectura completa de la tabla.
  3. ROWID: indica al optimizador una lectura de la tabla por Rowid.
  4. INDEX: fuerza el uso del índice "index".
  5. OTROS: INDEX_ASC, INDEX_COMBINE, INDEX_DESC, INDEX_FFS, INDEX_JOIN, NO_INDEX, HASH, AND_EQUAL.

¿Qué hints existen para transformar consultas?

  • FACT
  • MERGE
  • NO_EXPAND
  • NO_EXPAND_GSET_TO_UNION
  • NO_FACT
  • NO_MERGE
  • NOREWRITE
  • REWRITE
  • STAR_TRANSFORMATION
  • USE_CONCAT

¿Qué hints existen 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

¿Qué hints existen para la ejecución en paralelo?

  • NOPARALLEL
  • PARALLEL
  • NOPARALLEL_INDEX
  • PARALLEL_INDEX
  • PQ_DISTRIBUTE

¿Qué hints suplementarios hay?

  • 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

¿Algún ejemplo de la sintaxis adecuada?

La sintaxis adecuada sería:

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