Cómo asocia SQL Server las guías de plan a consultas

SQL Server asocia las guías de plan de tipo OBJECT a consultas que aparecen dentro del procedimiento almacenado, el desencadenador o la función (módulo) que se nombra en el argumento @module_or_batch del procedimiento almacenado sp_create_plan_guide. Si existe una guía de plan en el módulo, ésta se asocia a la consulta especificada.

Para consultas enviadas en lotes, SQL Server les asocia las guías de plan tratando primero de asociar la consulta a una guía de plan basada en SQL, después, tratando de parametrizar la consulta, y luego, intentándolo de nuevo. La siguiente ilustración muestra una visión general de este proceso.

Cómo compara SQL Server las guías de plan y las consultas

  1. El optimizador de consultas de SQL Server reconoce un lote ejecutado como una solicitud para compilar cada instrucción dentro del lote.

  2. En el caso de una instrucción específica incluida en el lote, SQL Server trata de asociar la instrucción a una guía de plan basada en SQL cuyo argumento @module_or_batch se corresponde con el del texto del lote entrante, incluidos los valores literales constantes, y cuyo argumento @stmt también se corresponde con la instrucción del lote. Si existe este tipo de guía de plan y la asociación se efectúa correctamente, el texto de la instrucción se modifica para incluir las sugerencias de consulta especificadas en la guía. A continuación, se compila la instrucción como corresponda.

  3. Si una guía de plan no se asocia a la instrucción en el paso 2, SQL Server trata de parametrizar la instrucción mediante la parametrización forzada. En este paso, la parametrización puede generar un error por alguna de las siguientes razones:

    1. La instrucción ya está parametrizada o contiene variables locales.

    2. Se ha aplicado la opción de configuración de la base de datos PARAMETERIZATION SIMPLE por medio del comando SET (la configuración predeterminada) y no existe ninguna guía de plan de tipo TEMPLATE que se corresponda con la instrucción y especifique la sugerencia de consulta PARAMETERIZATION FORCED.

    3. Existe una guía de plan de tipo TEMPLATE que se corresponde con la instrucción y especifica la sugerencia de consulta PARAMETERIZATION SIMPLE.

    Si se produce la parametrización forzada, SQL Server trata de asociar la forma parametrizada de la instrucción a una guía de plan de tipo SQL que se haya creado en esa instrucción parametrizada. Si existe este tipo de guía de plan y la asociación se efectúa correctamente, el texto de la instrucción se modifica para incluir las sugerencias de consulta especificadas en la guía. A continuación, se compila la instrucción como corresponda. Si no se asocia una guía de plan de este tipo, la instrucción parametrizada se compila sin ser modificada antes por una guía de plan.

  4. Si la parametrización genera un error en el paso 3, SQL Server trata de parametrizar la instrucción de nuevo. Esta vez, SQL Server aplica el comportamiento de parametrización simple predeterminado. A continuación, se compila la consulta resultante directamente. A los resultados de la parametrización simple no se asocian guías de plan.

    Nota

    La sugerencia de consulta RECOMPILE se omite en guías de plan de tipo SQL que se corresponden con consultas parametrizadas mediante la parametrización forzada o simple. Además, se emite una advertencia.