Exécution directe
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
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 à l’exécution à l’aide de la fonction SQLExecDirect . Lorsque l’instruction atteint le serveur, SQL Server la compile dans un plan d’exécution, puis exécute immédiatement le plan d’exécution.
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.
SQL Server améliore considérablement les performances de l’exécution directe d’instructions couramment exécutées dans des environnements multiutilisateurs et l’utilisation de SQLExecDirect avec des marqueurs de paramètres pour les instructions SQL couramment exécutées peuvent aborder l’efficacité de l’exécution préparée.
Lorsqu’il est connecté à une instance de SQL Server, le pilote ODBC SQL Server Native Client utilise sp_executesql pour transmettre l’instruction SQL ou le lot spécifié sur SQLExecDirect. SQL Server a une logique pour déterminer rapidement si une instruction SQL ou un lot 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 effectuée, SQL Server réutilise simplement le plan existant plutôt que de compiler un nouveau plan. Cela signifie que les instructions SQL couramment exécutées avec SQLExecDirect dans un système avec de nombreux utilisateurs bénéficieront de nombreux avantages de réutilisation du plan qui n’étaient 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 des 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 SQL Server Native Client ont tous les deux 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’opportunité se présente.