Sentencia SET CURRENT QUERY OPTIMIZATION

La sentencia SET CURRENT QUERY OPTIMIZATION asigna un valor al registro especial CURRENT QUERY OPTIMIZATION. El valor especifica la clase actual de técnicas de optimización habilitadas al preparar las sentencias de SQL dinámico.

La sentencia no está bajo el control de la transacción.

Invocación

Esta sentencia se puede incorporar a un programa de aplicación o emitir mediante el uso de sentencias de SQL dinámico. Se trata de una sentencia ejecutable que puede prepararse de forma dinámica.

Autorización

No se necesita.

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visualSETCURRENTQUERYOPTIMIZATION =0123579variable-sistema-principal

Descripción

clase-optimización
La clase-optimización se puede especificar como una constante de enteros o como el nombre de una variable del lenguaje principal que contendrá el valor adecuado en tiempo de ejecución. A continuación se facilita una visión general de las clases.
0
Especifica que se efectúa una optimización mínima para generar un plan de acceso. Esta clase es la más adecuada para el acceso SQL dinámico simple para tablas bien indexadas.
1
Especifica que se realiza una optimización comparable en términos generales a versiones anteriores de este producto para generar un plan de acceso.
2
Especifica un nivel de optimización superior al nivel 1, pero a un coste de optimización significativamente inferior a los niveles 3 y superiores, especialmente para consultas muy complejas.
3
Especifica que se efectúa una optimización moderada para generar un plan de acceso.
5
Especifica que se efectúa una optimización significativa para generar un plan de acceso. Para consultas SQL dinámico complejas, se utilizan las normas heurísticas para limitar el tiempo empleado en seleccionar un plan de acceso. Cuando sea posible, las consultas utilizarán tablas de consulta materializada en lugar de las tablas base subyacentes.
7
Especifica que se efectúa una optimización significativa para generar un plan de acceso. Similar al 5 pero sin las normas heurísticas.
9
Especifica que se efectúa una optimización máxima para generar un plan de acceso. Puede expandir mucho el número de planes de acceso posibles que se evalúan. Esta clase debe utilizarse para determinar si se puede generar un plan de acceso mejor para las consultas muy complejas y de muy larga ejecución que utilizan tablas grandes. Las medidas de explicación y de rendimiento se pueden utilizar para verificar que se haya generado el plan mejor.
variable-lenguaje-principal
El tipo de datos es INTEGER. El valor debe estar en el rango de 0 a 9 (SQLSTATE 42815) pero debe ser 0, 1, 2, 3, 5, 7 o 9. Si una variable-lenguaje-principal tiene asociada una variable de indicador, el valor de dicha variable de indicador no debe indicar un valor nulo (SQLSTATE 42815).

Notas

  • Cuando el registro CURRENT QUERY OPTIMIZATION se establece en un valor en particular, se habilita un conjunto de normas para volver a escribir la consulta y ciertas variables de optimización toman valores determinados. Esta clase de técnicas de optimización se utiliza después durante la preparación de sentencias de SQL.
  • En general, el cambio de la clase de optimización afecta al tiempo de ejecución de la aplicación, al tiempo de compilación y a los recursos necesarios. La mayoría de las sentencias se optimizarán de manera adecuada utilizando la clase de optimización de consulta por omisión. Las clases de optimización de consulta inferiores, especialmente las clases 1 y 2,pueden ser adecuadas para las sentencias de SQL dinámico para las cuales los recursos que consume una operación PREPARE dinámica son una parte significativa de los necesarios para ejecutar la consulta. Las clases de optimización superiores sólo deben elegirse después de tener en cuenta los recursos adicionales que pueden consumirse y verificar que se haya generado un plan de acceso mejor.
  • Las clases de optimización de consulta deben estar en el rango de 0 a 9. Las clases fuera de este rango devolverán un error (SQLSTATE 42815). Las clases no soportadas dentro de este rango devolverán un aviso (SQLSTATE 01608) y se sustituirán por la siguiente clase de optimización de consulta inferior. Por ejemplo, una clase 6 de optimización de consulta se sustituirá por 5.
  • Las sentencias preparadas dinámicamente utilizan la clase de optimización que se ha establecido por la sentencia SET CURRENT QUERY OPTIMIZATION más reciente que se ha ejecutado. En los casos en los que todavía no se ha ejecutado una sentencia SET CURRENT QUERY OPTIMIZATION, la clase de optimización de la consulta la determina el valor del parámetro de configuración de la base de datos dft_queryopt.
  • Las sentencias enlazadas estáticamente no utilizan el registro especial CURRENT QUERY OPTIMIZATION; por lo tanto, esta sentencia no tiene ningún efecto sobre ellas. La opción QUERYOPT se utiliza durante el preproceso o vinculación para especificar la clase de optimización necesaria para las sentencias vinculadas estáticamente. Si no se especifica QUERYOPT, se utilizará el valor por omisión que especifica el parámetro de configuración de la base de datos dft_queryopt.
  • No se retrotrae el resultado de la ejecución de la sentencia SET CURRENT QUERY OPTIMIZATION si se retrotrae la unidad de trabajo en la que se ejecuta.

Ejemplos

  • Ejemplo 1:  Este ejemplo muestra cómo se puede seleccionar el grado de optimización más alto.
       SET CURRENT QUERY OPTIMIZATION 9
  • Ejemplo 2:  El ejemplo siguiente muestra cómo se puede utilizar el registro especial CURRENT QUERY OPTIMIZATION en una consulta.
    Mediante la utilización de la vista de catálogo SYSCAT.PACKAGES, busque todos los planes que se han enlazado con el mismo valor que el valor actual del registro especial CURRENT QUERY OPTIMIZATION.
       EXEC SQL DECLARE C1 CURSOR FOR
         SELECT PKGNAME, PKGSCHEMA FROM SYSCAT.PACKAGES
         WHERE QUERYOPT = CURRENT QUERY OPTIMIZATION