Creare una nuova guida di piano

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

Le guide di piano influiscono sull'ottimizzazione delle query mediante l'aggiunta di hint o di un piano di query fisso. Nella guida di piano è necessario specificare l'istruzione che si vuole ottimizzare e una clausola OPTION che contiene gli hint per la query da usare. In alternativa, un piano di query specifico che si vuole usare per ottimizzare la query. Quando viene eseguita la query, in Query Optimizer è possibile far corrispondere l'istruzione Transact-SQL alla guida di piano e associare la clausola OPTION alla query in fase di esecuzione oppure utilizzare il piano di query specificato.

Una guida di piano applica a una query un piano di query fisso e/o hint per la query.

Limitazioni e restrizioni

  • Gli argomenti per sp_create_plan_guide devono essere inseriti nell'ordine illustrato. Quando si forniscono valori per i parametri di sp_create_plan_guide, è necessario specificare in modo esplicito tutti i nomi dei parametri oppure nessuno. Se ad esempio si specifica @name =, è necessario specificare anche @stmt =, @type = e così via. Analogamente, se @name = viene omesso e viene specificato soltanto il valore del parametro, è necessario omettere anche i nomi dei parametri restanti e specificarne solo il valore. I nomi degli argomenti hanno scopo esclusivamente descrittivo, per facilitare la comprensione della sintassi. SQL Server non verifica che il nome di parametro specificato corrisponda al nome del parametro nella posizione in cui il nome viene utilizzato.

  • È possibile creare più guide di piano OBJECT o SQL per la stessa query e batch o modulo. Tuttavia è possibile abilitare una sola guida di piano alla volta.

  • Non è possibile creare guide di piano di tipo OBJECT per un valore @module_or_batch che fa riferimento a una stored procedure, una funzione o un trigger DML che specifica la clausola WITH ENCRYPTION o che è temporaneo.

  • Se si tenta di eliminare o modificare una funzione, una stored procedure o un trigger DML a cui viene fatto riferimento in una guida di piano abilitata o disabilitata, viene generato un errore. Viene generato un errore anche se si cerca di eliminare una tabella per la quale è stato definito un trigger a cui una guida di piano fa riferimento.

Autorizzazioni

Per creare una guida di piano di tipo OBJECT, è necessaria l'autorizzazione ALTER per l'oggetto a cui si fa riferimento. Per creare una guida di piano di tipo SQL o TEMPLATE, è necessaria l'autorizzazione ALTER per il database corrente.

Per creare una guida di piano usando SSMS

  1. Fare clic sul segno più per espandere il database in cui si desidera creare una guida di piano, quindi fare clic sul segno più per espandere la cartella Programmabilità .

  2. Fare clic con il pulsante destro del mouse sulla cartella Guide di piano e selezionare Nuova guida di piano….. select_plan_guide

  3. Nella casella Nome della finestra di dialogo Nuova guida di piano immettere il nome della guida di piano.

  4. Nella casella Istruzione immettere l'istruzione Transact-SQL sulla quale deve essere applicata la guida di piano.

  5. Nell'elenco Tipo di ambito selezionare il tipo di entità in cui l'istruzione Transact-SQL viene visualizzata. Viene specificato il contesto per adeguare l'istruzione Transact-SQL alla guida di piano. I valori possibili sono OBJECT, SQLe TEMPLATE.

  6. Nella casella Batch ambito immettere il testo del batch in cui l'istruzione Transact-SQL viene visualizzata. Nel testo del batch non può essere inclusa un'istruzione USEdatabase. La casella Batch ambito è disponibile solo quando come tipo di ambito è selezionato SQL . Se non è stato immesso alcun dato nella casella relativa al batch ambito quando SQL è il tipo di ambito, il valore del testo del batch viene impostato sullo stesso valore inserito nella casella Istruzione .

  7. Nell'elenco Nome schema ambito immettere il nome dello schema in cui è contenuto l'oggetto. La casella Nome schema ambito è disponibile solo quando come tipo di ambito è selezionato Oggetto .

  8. Nella casella Nome oggetto ambito immettere il nome della stored procedure Transact-SQL, della funzione scalare definita dall'utente, della funzione con valori di tabella con istruzioni multiple o del trigger DML in cui viene visualizzata l'istruzione Transact-SQL. La casella Nome oggetto ambito è disponibile solo quando come tipo di ambito è selezionato Oggetto .

  9. Nella casella Parametri immettere il nome e il tipo di dati di tutti i parametri incorporati nell'istruzione Transact-SQL.

    I parametri vengono applicati solo nei casi seguenti:

    • Il tipo di ambito è SQL o TEMPLATE. Se TEMPLATE, i parametri non devono essere NULL.

    • L'istruzione Transact-SQL viene sottomessa tramite sp_executesql e non viene specificato un valore per il parametro oppure SQL Server trasmette internamente un'istruzione dopo averla parametrizzata.

  10. Nella casella Hint immettere gli hint per la query o il piano di query da applicare all'istruzione Transact-SQL. Per specificare uno o più hint per la query, immettere una clausola OPTION valida.

  11. Fare clic su OK.

plan_guide

Creare una guida di piano usando T-SQL

  1. In Esplora oggetti connettersi a un'istanza del motore di database.

  2. Sulla barra Standard fare clic su Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra Query, quindi fare clic su Esegui.

    -- 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)';  
    
    

Per altre informazioni, vedere sp_create_plan_guide (Transact-SQL).