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. 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.
SELECT /* + hint(table) */ column1, column2 FROM table WHERE condition;
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.
FIRST_ROWS: el objetivo del optimizador es devolver la primera línea de la consulta en el menor tiempo posible.
CHOOSE: tiene en cuenta las estadísticas, si es que existen, y utiliza un optimizador basado en costes.
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.
INDEX_ASC, INDEX_COMBINE, INDEX_DESC, INDEX_FFS, INDEX_JOIN, NO_INDEX, HASH, AND_EQUAL.
FACT, MERGE, NO_EXPAND, NO_EXPAND_GSET_TO_UNION, NO_FACT, NO_MERGE, NOREWRITE, REWRITE, STAR_TRANSFORMATION, USE_CONCAT.
DRIVING_SITE, HASH_AJ, HASH_SJ, LEADING, MERGE_AJ, MERGE_SJ, NL_AJ, NL_SJ, USE_HASH, USE_MERGE, USE_NL.
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.
Foto: © Unsplash