Condividi tramite


Creare una nuova guida di piano

È possibile creare una guida di piano in SQL Server 2012 utilizzando SQL Server Management Studio o Transact-SQL. Le guide di piano influiscono sull'ottimizzazione delle query mediante l'aggiunta di hint o di un piano di query fisso. Nel piano di guida si specifica l'istruzione Transact-SQL da ottimizzare e la clausola OPTION che contiene gli hint che si desidera utilizzare per l'ottimizzazione della query o un piano di query specifico che si desidera 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.

Contenuto dell'argomento

  • Prima di iniziare:

    Limitazioni e restrizioni

    Sicurezza

  • Per creare una guida di piano utilizzando:

    SQL Server Management Studio

    Transact-SQL

Prima di iniziare

Limitazioni e restrizioni

  • Gli argomenti per sp_create_plan_guide devono essere inseriti nell'ordine mostrato. Quando si specificano 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 cerca di eliminare o modificare una funzione, una stored procedure o un trigger DML a cui fa riferimento 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.

Sicurezza

Autorizzazioni

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

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Utilizzo di SQL Server Management Studio

Per creare una guida di piano

  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.

  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, SQL e 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 USE database. 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 inviata tramite sp_executesql e viene specificato un valore per il parametro oppure SQL Server consente di inviare 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. Scegliere OK.

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]

Utilizzo di Transact-SQL

Per creare una guida di piano

  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 ulteriori informazioni, vedere sp_create_plan_guide (Transact-SQL).

Icona freccia utilizzata con il collegamento Torna all'inizio[Inizio pagina]