Creare una nuova guida di piano
Si applica a:SQL Server
Database SQL di Azure
Istanza 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. Oppure, un piano di query specifico che vuoi utilizzare 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 al piano applica a una query un piano di query fisso oppure suggerimenti 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 di piano SQL per la stessa query, 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.
Creare una guida al piano utilizzando SSMS
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à .
Fare clic con il pulsante destro del mouse sulla cartella Guide di piano e selezionare Nuova guida di piano…..
Nella casella Nome della finestra di dialogo Nuova guida di piano immettere il nome della guida di piano.
Nella casella Istruzione immettere l'istruzione Transact-SQL sulla quale deve essere applicata la guida di piano.
Nell'elenco Tipo di ambito selezionare il tipo di entità in cui l'istruzione Transact-SQL viene visualizzata. Viene specificato il contesto per associare l'istruzione Transact-SQL alla guida del piano. I valori possibili sono OBJECT, SQLe TEMPLATE.
Nella casella Ambito del batch, immettere il testo del batch in cui appare l'istruzione Transact-SQL. Nel testo del batch non può essere inclusa un'istruzione
USE
database. La casella ambito batch è disponibile solo quando viene selezionato SQL come tipo di ambito. Se non viene immesso alcun dato nella casella "batch ambito" quando SQL è il tipo di ambito, il valore del testo del batch viene impostato allo stesso valore della casella Istruzione.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 .
Nella casella di testo 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 appare l'istruzione Transact-SQL. La casella Nome oggetto ambito è disponibile solo quando come tipo di ambito è selezionato Oggetto .
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 viene specificato un valore per il parametro, oppure SQL Server trasmette internamente un'istruzione dopo averla parametrizzata.
Nella casella Hints, immettere gli hint o il piano di query da applicare all'istruzione Transact-SQL. Per specificare uno o più suggerimenti della query, immettere una clausola OPTION valida.
Fare clic su OK.
Crea una guida alla pianificazione usando T-SQL
In Esplora oggetti, connettersi a un'istanza del motore di database.
Sulla barra Standard fare clic su Nuova query.
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).