Crear una nueva guía de plan

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Las guías de plan influyen en la optimización de las consultas adjuntando sugerencias de consulta o un plan de consulta fijo. En la guía de plan, se especifica la instrucción que se desea optimizar y una cláusula OPTION que contiene sugerencias de consulta que desea utilizar. o un plan de consulta específico que desea usar para optimizar la consulta. Cuando se ejecuta la consulta, el optimizador de consultas hace coincidir la instrucción Transact-SQL con la guía de plan y adjunta la cláusula OPTION a la consulta en tiempo de ejecución o usa el plan de consulta especificado.

Una guía de plan aplica un plan de consulta fijo, y/o sugerencias de consulta, a una consulta.

Limitaciones y restricciones

  • Los argumentos de sp_create_plan_guide deben indicarse en el orden que se muestra. Cuando se incluyen valores para los parámetros de sp_create_plan_guide, deben especificarse todos los nombres de parámetro de forma explícita, o bien no especificarse ninguno. Por ejemplo, si se especifica @name = , también deben especificarse @stmt = , @type =, etc. Del mismo modo, si se omite @name = y solo se indica el valor del parámetro, también deben omitirse los demás nombres de parámetro y solo se indicará su valor. Los nombres de argumento solo se incluyen con fines de descripción, para ayudar a entender la sintaxis. SQL Server no comprueba que el nombre del parámetro especificado coincida con el nombre del parámetro en la posición donde se usa el nombre.

  • Puede crearse más de una guía de plan OBJECT o SQL para la misma consulta y lote o módulo. Sin embargo, en un momento dado, solo puede estar habilitada una guía de plan.

  • No se pueden crear guías de plan de tipo OBJECT para un valor @module_or_batch que hace referencia a un procedimiento almacenado, una función o un desencadenador DML que especifica la cláusula WITH ENCRYPTION o que es temporal.

  • Se producirá un error si se intenta quitar o modificar una función, procedimiento almacenado o desencadenador DML al que una guía de plan, habilitada o deshabilitada, haga referencia. También se producirá un error si se intenta quitar una tabla que tenga definido un desencadenador al que haga referencia una guía de plan.

Permisos

Para crear una guía de plan de tipo OBJECT necesita el permiso ALTER en el objeto al que se hace referencia. Para crear una guía de plan de tipo SQL o TEMPLATE necesita el permiso ALTER en la base de datos actual.

Creación de una guía de plan mediante SSMS

  1. Haga clic en el signo más para expandir la base de datos en la que desea crear una guía de plan y, a continuación, haga clic en el signo más para expandir la carpeta Programación .

  2. Haga clic con el botón derecho en la carpeta Guías de plan y seleccione Nueva guía de plan.... select_plan_guide

  3. En el cuadro de diálogo Nueva guía de plan , en el cuadro Nombre , escriba el nombre de la guía de plan.

  4. En el cuadro Instrucción, escriba la instrucción Transact-SQL con la que se va a aplicar la guía de plan.

  5. En la lista Tipo de ámbito, seleccione el tipo de entidad en la que aparece la instrucción Transact-SQL. Esto especifica el contexto para hacer coincidir la instrucción Transact-SQL con la guía de plan. Los valores posibles son OBJECT, SQLy TEMPLATE.

  6. En el cuadro Lote de ámbito, escriba el texto del lote en el que aparece la instrucción Transact-SQL. El texto del lote no puede incluir una instrucción USEdatabase. El cuadro Lote de ámbito solo está disponible cuando SQL se ha seleccionado como tipo de ámbito. Si no escribe nada en el cuadro Lote de ámbito cuando SQL es el tipo de ámbito, el valor del texto del lote se establece en el mismo valor que está en el cuadro Instrucción .

  7. En la lista Nombre de esquema de ámbito , escriba el nombre del esquema en el que está contenido el objeto. El cuadro Nombre de esquema de ámbito solo está disponible cuando se ha seleccionado Objeto como tipo de ámbito.

  8. En el cuadro Nombre del objeto de ámbito, escriba el nombre del procedimiento almacenado de Transact-SQL, la función escalar definida por el usuario, la función con valores de tabla de instrucción múltiple o el desencadenador DML en el que aparece la instrucción Transact-SQL. El cuadro Nombre de objeto de ámbito solo está disponible cuando se ha seleccionado Objeto como tipo de ámbito.

  9. En el cuadro Parámetros, escriba el nombre del parámetro y el tipo de datos de todos los parámetros incrustados en la instrucción Transact-SQL.

    Solo se aplican los parámetros si se da una de las dos siguientes condiciones:

    • El tipo de ámbito es SQL o TEMPLATE. Si es TEMPLATE, los parámetros no deben ser NULL.

    • La instrucción Transact-SQL se envía mediante sp_executesql y se especifica un valor para el parámetro o SQL Server envía internamente una instrucción después de parametrizarla.

  10. En el cuadro Sugerencias, escriba las sugerencias de consulta o el plan de consulta que se aplicarán a la instrucción Transact-SQL. Para especificar una o varias sugerencias de consulta, escriba una cláusula OPTION válida.

  11. Haga clic en Aceptar.

plan_guide

Crear una guía de plan mediante T-SQL

  1. En el Explorador de objetos, conéctese a una instancia del Motor de base de datos.

  2. En la barra de Estándar, haga clic en Nueva consulta.

  3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic en Ejecutar.

    -- creates a plan guide named Guide1 based on a SQL statement  
    EXEC sp_create_plan_guide   
        @name = N'Guide1',   
        @stmt = N'SELECT TOP 1 *   
                  FROM Sales.SalesOrderHeader   
                  ORDER BY OrderDate DESC',   
        @type = N'SQL',  
        @module_or_batch = NULL,   
        @params = NULL,   
        @hints = N'OPTION (MAXDOP 1)';  
    
    

Para obtener más información, consulte sp_create_plan_guide (Transact-SQL).