Partager via


Exécution directe

L'exécution directe est la méthode d'exécution d'une instruction la plus simple. Une application génère une chaîne de caractères contenant une instruction Transact-SQL et la soumet pour exécution à l'aide de la fonction SQLExecDirect. Lorsque l'instruction atteint le serveur, SQL Server la compile dans un plan d'exécution et exécute immédiatement ce plan.

L'exécution directe est communément utilisée par les applications qui génèrent et exécutent des instructions au moment de l'exécution et s'avère la méthode la plus efficace pour les instructions qui ne sont exécutées qu'une seule fois. Elle présente néanmoins un inconvénient avec de nombreuses bases de données dans le sens où l'instruction SQL doit être analysée et compilée chaque fois qu'elle est exécutée, ce qui représente une surcharge en cas d'exécution répétée de l'instruction.

Si vous êtes connecté aux versions de SQL Server antérieures à la version 7.0, l'exécution directe doit être utilisée dans les situations suivantes :

  • si une instruction sera probablement exécutée moins de quatre fois ;

  • pour appeler des procédures stockées.

SQL Server 2000 et versions ultérieures améliorent considérablement les performances de l'exécution directe d'instructions fréquemment exécutées dans les environnements multi-utilisateurs. En outre, l'utilisation de SQLExecDirect avec des marqueurs de paramètres pour les instructions SQL fréquemment exécutées peut permettre d'approcher l'efficacité d'une exécution préparée.

Une fois connecté à une instance de SQL Server, le pilote ODBC SQL Server Native Client utilise sp_executesql pour transmettre l'instruction ou le lot SQL sur SQLExecDirect. SQL Server peut rapidement déterminer si une instruction ou un lot SQL exécuté avec sp_executesql correspond à l'instruction ou au lot qui a généré un plan d'exécution qui existe déjà en mémoire. Si une correspondance est trouvée, SQL Server réutilise simplement le plan existant au lieu de compiler un nouveau plan. Cela signifie que les instructions SQL fréquemment exécutées qui sont exécutées avec SQLExecDirect dans un système comptant de nombreux utilisateurs tireront parti de nombreux avantages de la réutilisation de plans qui n'étaient jusqu'à lors disponibles que pour les procédures stockées dans les versions antérieures de SQL Server.

La réutilisation de plans d'exécution ne présente des avantages que si plusieurs utilisateurs exécutent la même instruction ou le même lot SQL. Suivez les conventions de codage suivantes pour accroître la probabilité que les instructions SQL exécutées par différentes clients soient suffisamment semblables pour pouvoir réutiliser des plans d'exécution :

  • N'incluez pas de constantes de données dans les instructions SQL, mais utilisez des marqueurs de paramètres liés à des variables de programme. Pour plus d'informations, consultez Utilisation de paramètres d'instruction.

  • Utilisez des noms d'objets complets. Les plans d'exécution ne sont pas réutilisés si les noms d'objets ne sont pas qualifiés.

  • Dans la mesure du possible, faites que les connexions d'application utilisent un ensemble commun d'options de connexion et d'instruction. Les plans d'exécution générés pour une connexion avec un jeu d'options (tel qu'ANSI_NULLS) ne sont pas réutilisés pour une connexion ayant un autre jeu d'options. Le pilote ODBC SQL Server Native Client et le fournisseur OLE DB de SQL Server Native Client partagent les mêmes paramètres par défaut pour ces options.

Si toutes les instructions exécutées avec SQLExecDirect sont codées à l'aide de ces conventions, SQL Server peut réutiliser les plans d'exécution lorsque l'occasion se présente.