Condividi tramite


Esecuzione diretta

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

L'esecuzione diretta rappresenta la modalità più semplice di esecuzione di un'istruzione. Un'applicazione compila una stringa di caratteri contenente un'istruzione Transact-SQL e la invia per l'esecuzione usando la funzione SQLExecDirect . Quando l'istruzione raggiunge il server, SQL Server lo compila in un piano di esecuzione e quindi esegue immediatamente il piano di esecuzione.

L'esecuzione diretta viene in genere utilizzata dalle applicazioni che compilano 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.

SQL Server migliora significativamente le prestazioni dell'esecuzione diretta delle istruzioni comunemente eseguite in ambienti multiutente e l'uso di SQLExecDirect con marcatori di parametro per le istruzioni SQL comunemente eseguite può avvicinarsi all'efficienza dell'esecuzione preparata.

Quando si è connessi a un'istanza di SQL Server, il driver ODBC di SQL Server Native Client usa sp_executesql per trasmettere l'istruzione SQL o il batch specificato in SQLExecDirect. SQL Server ha la logica per determinare rapidamente se un'istruzione SQL o un batch eseguito con sp_executesql corrisponde all'istruzione o al batch che ha generato un piano di esecuzione già esistente in memoria. Se viene eseguita una corrispondenza, SQL Server riutilizza semplicemente il piano esistente anziché compilare un nuovo piano. Ciò significa che le istruzioni SQL comunemente eseguite con SQLExecDirect in un sistema con molti utenti trarranno vantaggio da molti dei vantaggi del 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 lo stesso batch o la stessa istruzione 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 i marcatori di parametro associati alle variabili di programma. Per altre informazioni, vedere Uso dei parametri dell'istruzione.

  • 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 OLE DB di SQL Server Native Client hanno entrambe le stesse impostazioni predefinite per queste opzioni.

Se tutte le istruzioni eseguite con SQLExecDirect vengono codificate usando queste convenzioni, SQL Server può riutilizzare i piani di esecuzione quando si verifica l'opportunità.

Vedi anche

Esecuzione di istruzioni (ODBC)