Traitement d’une instruction SQL
Avant de discuter des techniques d’utilisation de SQL par programmation, il est nécessaire de discuter de la façon dont une instruction SQL est traitée. Les étapes impliquées sont communes aux trois techniques, bien que chaque technique les effectue à des moments différents. L’illustration suivante montre les étapes impliquées dans le traitement d’une instruction SQL, qui sont abordées dans le reste de cette section.
Pour traiter une instruction SQL, un SGBD effectue les cinq étapes suivantes :
Le SGBD analyse d’abord l’instruction SQL. Il divise l’instruction en mots individuels, appelés jetons, vérifie que l’instruction a un verbe valide et des clauses valides, et ainsi de suite. Les erreurs de syntaxe et les fautes d’orthographe peuvent être détectées dans cette étape.
Le SGBD valide l’instruction. Il vérifie l’instruction sur le catalogue système. Toutes les tables nommées dans l’instruction existent-elles dans la base de données ? Existe-t-il toutes les colonnes et les noms de colonnes sont-ils non ambigus ? L’utilisateur dispose-t-il des privilèges requis pour exécuter l’instruction ? Certaines erreurs sémantiques peuvent être détectées dans cette étape.
Le SGBD génère un plan d’accès pour l’instruction. Le plan d’accès est une représentation binaire des étapes requises pour effectuer l’instruction ; il s’agit de l’équivalent SGBD du code exécutable.
Le SGBD optimise le plan d’accès. Il explore différentes façons d’exécuter le plan d’accès. Un index peut-il être utilisé pour accélérer une recherche ? Le SGBD doit-il d’abord appliquer une condition de recherche à la table A, puis la joindre à la table B, ou doit-elle commencer par la jointure et utiliser la condition de recherche par la suite ? Une recherche séquentielle par le biais d’une table peut-elle être évitée ou réduite à un sous-ensemble de la table ? Après avoir exploré les alternatives, le SGBD choisit l’un d’entre eux.
Le SGBD exécute l’instruction en exécutant le plan d’accès.
Les étapes utilisées pour traiter une instruction SQL varient en fonction de la quantité d’accès à la base de données dont elles ont besoin et du temps nécessaire. L’analyse d’une instruction SQL ne nécessite pas d’accès à la base de données et peut être effectuée très rapidement. L’optimisation, en revanche, est un processus très gourmand en uc et nécessite l’accès au catalogue système. Pour une requête complexe et multitable, l’optimiseur peut explorer des milliers de façons différentes d’effectuer la même requête. Toutefois, le coût d’exécution de la requête de manière inefficace est généralement si élevé que le temps passé dans l’optimisation est plus que récupéré dans une vitesse d’exécution de requête accrue. Cela est encore plus significatif si le même plan d’accès optimisé peut être utilisé sur et sur pour effectuer des requêtes répétitives.