Condividi tramite


Esecuzione diretta

L'esecuzione diretta rappresenta la modalità più semplice di esecuzione di un'istruzione. Viene creata una stringa di caratteri contenente un'istruzione Transact-SQL e inviata per l'esecuzione mediante la funzione SQLExecDirect. Dopo avere raggiunto il server, l'istruzione viene compilata da SQL Server in un piano di esecuzione, che viene quindi immediatamente eseguito.

L'esecuzione diretta viene in genere utilizzata dalle applicazioni che creano ed eseguono istruzioni in fase di esecuzione e rappresenta il metodo più efficiente per le istruzioni eseguite una sola volta. Lo svantaggio con molti database consiste nel fatto che l'istruzione SQL deve essere analizzata e compilata ogni volta che viene eseguita determinando un aumento dell'overhead se l'istruzione viene eseguita più volte.

Se si è connessi a una versione di SQL Server precedente alla 7.0, utilizzare l'esecuzione diretta nei seguenti casi:

  • Quando un'istruzione viene eseguita meno di quattro volte.

  • Per chiamare le stored procedure.

In SQL Server 2000 e versioni successive vengono migliorate notevolmente le prestazioni dell'esecuzione diretta delle istruzioni utilizzate più di frequente negli ambienti multiutente e l'utilizzo di SQLExecDirect con gli indicatori di parametro per le istruzioni SQL utilizzate più di frequente si avvicina all'efficienza dell'esecuzione preparata.

In caso di connessione a un'istanza di SQL Server, il driver ODBC di SQL Server Native Client utilizza sp_executesql per trasmettere l'istruzione o il batch SQL specificato in SQLExecDirect. SQL Server include una logica per determinare rapidamente se un'istruzione o un batch SQL eseguito con sp_executesql corrisponde all'istruzione o al batch che ha generato un piano di esecuzione già esistente in memoria. Se esiste una corrispondenza, SQL Server riutilizza semplicemente il piano esistente anziché compilarne uno nuovo. Ciò significa che le istruzioni SQL utilizzate più di frequente eseguite con SQLExecDirect in un sistema con molti utenti usufruiranno dei molti vantaggi derivanti dal riutilizzo del piano disponibili solo per le stored procedure nelle versioni precedenti di SQL Server.

Il vantaggio di riutilizzare i piani di esecuzione è valido solo quando più utenti eseguono la stessa istruzione o lo stesso batch SQL. Rispettare le seguenti convenzioni di scrittura del codice per aumentare la probabilità che le istruzioni SQL eseguite da client diversi siano simili abbastanza per potere riutilizzare i piani di esecuzione:

  • Non includere costanti di dati nelle istruzioni SQL; utilizzare invece gli indicatori di parametro associati alle variabili di programma. Per ulteriori informazioni, vedere Utilizzo dei parametri delle istruzioni.

  • Utilizzare nomi di oggetto completi. I piani di esecuzione non vengono riutilizzati se i nomi di oggetto non sono completi.

  • Se possibile, utilizzare per le connessioni dell'applicazione un set comune di opzioni dell'istruzione e di connessione. I piani di esecuzione generati per una connessione con un set di opzioni, ad esempio ANSI_NULLS, non vengono riutilizzati per una connessione con un altro set di opzioni. Il driver ODBC di SQL Server Native Client e il provider ODBC di SQL Server Native Client hanno le stesse impostazioni predefinite per queste opzioni.

Se tutte le istruzioni eseguite con SQLExecDirect vengono codificate utilizzando tali convenzioni, in SQL Server sarà possibile, qualora si presentino le condizioni, riutilizzare i piani di esecuzione.