Condividi tramite


Preparazione delle istruzioni SQL

Il motore relazionale di SQL Server 2005 offre supporto completo per la preparazione di istruzioni SQL prima della relativa esecuzione. Se in un'applicazione è necessario eseguire più volte un'istruzione SQL, è possibile utilizzare l'API di database per:

  • Preparare l'istruzione una sola volta. L'istruzione SQL viene compilata in un piano di esecuzione.
  • Eseguire il piano di esecuzione precompilato ogni volta che è necessario eseguire l'istruzione. In questo modo, si evita di ricompilare l'istruzione SQL a ogni esecuzione dopo la prima volta.
    La preparazione e l'esecuzione delle istruzioni è controllata dalle funzioni e dai metodi dell'API. Tali elementi non fanno parte del linguaggio Transact-SQL. Il modello di preparazione/esecuzione per l'esecuzione di istruzioni SQL è supportato dal provider OLE DB SQL Native Client e dal driver ODBC di SQL Native Client. Alla richiesta di preparazione, il provider o il driver invia l'istruzione a SQL Server con la richiesta di preparare l'istruzione. SQL Server compila un piano di esecuzione e restituisce un handle del piano al provider o al driver. Alla richiesta di esecuzione, il provider o il driver invia al server una richiesta di esecuzione del piano associato all'handle.

Le istruzioni preparate non possono essere utilizzate per creare oggetti temporanei in SQL Server 2005. Nelle istruzioni preparate, infatti, non è consentito fare riferimento a stored procedure di sistema che creano oggetti temporanei, ad esempio tabelle temporanee. Tali procedure devono essere eseguite in modo diretto.

L'utilizzo eccessivo del modello di preparazione/esecuzione può determinare un peggioramento delle prestazioni. Se un'istruzione viene eseguita una sola volta, è sufficiente l'esecuzione diretta, che richiede un solo ciclo di andata e ritorno in rete per il server. La preparazione e l'esecuzione di un'istruzione SQL che viene eseguita una sola volta richiedono un ciclo di andata e ritorno in rete aggiuntivo (uno per preparare l'istruzione e uno per eseguirla).

È possibile preparare un'istruzione in modo più efficiente utilizzando gli indicatori di parametro. Si supponga, ad esempio, che a un'applicazione venga richiesto occasionalmente di recuperare informazioni sui prodotti dal database di esempio AdventureWorks. L'applicazione può eseguire questa operazione in due modi diversi.

L'applicazione può innanzitutto eseguire una query distinta per ogni prodotto richiesto:

SELECT * FROM AdventureWorks.Production.Product
WHERE ProductID = 63

Altrimenti, l'applicazione può eseguire le operazioni seguenti:

  1. Preparare un'istruzione contenente un indicatore di parametro (?):

    SELECT * FROM AdventureWorks.Production.Product
    WHERE ProductID = ?
    
  2. Associare una variabile di programma all'indicatore di parametro.

  3. A ogni richiesta di informazioni sul prodotto, inserire nella variabile associata il valore di chiave ed eseguire l'istruzione.

Il secondo metodo è più efficiente se l'istruzione viene eseguita più di tre volte.

In SQL Server 2005 il modello di preparazione/esecuzione non offre alcun vantaggio significativo in termini di prestazioni rispetto all'esecuzione diretta, a causa delle modalità di riutilizzo dei piani di esecuzione da parte di SQL Server 2005. In SQL Server 2005 sono disponibili algoritmi efficaci che consentono di trovare una corrispondenza tra le istruzioni SQL correnti e i piani di esecuzione generati per esecuzioni precedenti della stessa istruzione SQL. Se un'applicazione esegue più volte un'istruzione SQL con indicatori di parametro, SQL Server 2005 riutilizzerà il piano di esecuzione della prima esecuzione per la seconda e le successive esecuzioni, a meno che il piano non sia stato rimosso dalla cache delle procedure. Il modello di preparazione/esecuzione presenta comunque i vantaggi seguenti:

  • È più conveniente cercare un piano di esecuzione tramite un handle di identificazione che non utilizzare gli algoritmi per trovare una corrispondenza tra un'istruzione SQL e i piani di esecuzione esistenti.
  • L'applicazione può controllare il momento della creazione del piano di esecuzione e del suo riutilizzo.
  • Il modello di preparazione/esecuzione è utilizzabile con altri database, incluse le versioni precedenti di SQL Server.

Preparazione ed esecuzione nelle versioni precedenti di SQL Server

SQL Server 6.5 e le versioni precedenti non supportano direttamente il modello di preparazione/esecuzione, che è invece supportato dal driver ODBC per SQL Server tramite l'utilizzo di stored procedure:

  • Se un'applicazione richiede la preparazione di un'istruzione SQL, il driver ODBC la inserisce in un'istruzione CREATE PROCEDURE e la invia a SQL Server.
  • Alla richiesta di esecuzione, il driver ODBC richiede a SQL Server di eseguire la stored procedure generata.

In SQL Server 6.5 e 6.0 le stored procedure generate sono temporanee e vengono archiviate in tempdb. Poiché SQL Server 4.21a e le versioni precedenti non supportano le stored procedure temporanee, il driver genera stored procedure normali che vengono archiviate nel database corrente. Il provider Microsoft OLE DB per SQL Server e il driver ODBC per SQL Server disponibili in SQL Server 2000 operano in questo modo quando sono connessi a SQL Server versione 6.5, SQL Server 6.0 e SQL Server 4.21a.

Vedere anche

Concetti

Caching e riutilizzo del piano di esecuzione
Parametri e riutilizzo del piano di esecuzione

Guida in linea e informazioni

Assistenza su SQL Server 2005