martes, 18 de marzo de 2014

Uso del comando HINT


Los hints son sirven para que el optimizador SQL de Oracle  elabore el plan de ejecución de una sentencia DML (sentencias de manipulación de datos como select, insert, update, delete, etc).Los hints, hablando desde un punto de vista práctico, no son muy utilizados, aunque no por ello pueden dejar de ser útiles en determinadas circunstancias.


Los hints se incorporan a una sentencia DML en forma de comentario y deben ir justo detrás del comando principal. Por ejemplo, si se tratara de una sentencia SELECT el formato sería el siguiente:

     SELECT /*+ COMANDO-HINT */ ...

Los hints usados son los siguientes:

/*+ RULE */ - Fuerza a que se utilice el optimizador basado en normas (rule-based optimizer). Con este optimizador los planes de ejecución cambían según sea la sintaxis de la sentencia DML, no utiliza las estadísticas asociadas con las tablas de la base de datos Oracle y no calcula los costes del plan de ejecución. El optimizador basado en normas no ha cambiado desde la versión 6 de Oracle.

/*+ CHOOSE */ - Fuerza a que se utilice el optimizador basado en costes (cost-based optimizer). Este optimizador construye los planes de ejecución basándose en las estadísticas almacenadas en el diccionario de datos. Tiene en consideración el número de lectura lógicas (el factor más importante), la utilización de la CPU junto con los accesos a disco y a memoria, y el uso de la red (cuando los datos residen en diferentes servidores). Una de las ventajas de utilizar el optimizador basado en costes es que Oracle lo está mejorándolo continuamente.

/*+ ALL_ROWS */ - Fuerza a que se utilice el optimizador basado en costes y optimiza el plan de ejecución de la sentencia DML para que devuelva todas las filas en el menor tiempo posible. Es la opción por defecto del optimizador basado en costes y es la solución apropiada para procesos en masa e informes, en los que son necesarias todas las filas para empezar a trabajar con ellas.

/*+ FIRST_ROWS (n) */ - También fuerza a que se utilice el optimizador basado en costes y optimiza el plan de ejecución de la sentencia DML para que devuelva las "n" primeras filas en el menor tiempo posible. Esto es idóneo para procesos iterativos y bucles, en los que podemos ir trabajando con las primeras filas mientras se recuperan el resto de resultados. Obviamente este hint no será considerado por el optimizador si se utilizan funciones de grupo como MAX, SUM, AVG, etc.

No hay comentarios:

Publicar un comentario