Étapes pour exécuter le plan
Chaque étape du plan d'exécution renvoie un ensemble de lignes qui sont soit utilisées à l'étape suivante, soit, lors de l'étape finale, renvoyées à l'utilisateur ou à l'application qui a émis l'instruction SQL. L’ensemble des lignes renvoyées par chaque étape est appelé la source des lignes. Figure 5-1 Un diagramme arborescent montre le flux de données d'une promenade à l'autre. La numérotation de chaque étape reflète l'ordre dans lequel les étapes sont affichées lorsque vous affichez le plan d'exécution (la manière d'afficher le plan d'exécution est brièvement expliquée). En général, ce n'est pas l'ordre dans lequel chaque étape est effectuée. Chaque étape du plan d'exécution récupère les lignes de la base de données ou reçoit les données des lignes en entrée d'une ou plusieurs sources de lignes :
Les étapes indiquées par des cases rouges récupèrent physiquement les données des fichiers de données de la base de données. Cette étape est appelée chemin d'accès. Les chemins d'accès pouvant être utilisés dans Oracle seront présentés en détail ultérieurement :
Les étapes 3 et 6 lisent respectivement toutes les lignes de la table EMP et de la table SALGRADE.
L'étape 5 recherche chaque valeur DEPTNO renvoyée par l'étape 3 dans l'index PK_DEPTNO. Il découvre les ROWID de ces lignes associées à la table DEPT.
L'étape 4 récupère de la table DEPT les lignes dont ROWID est renvoyé à l'étape 5.
Les étapes indiquées par la zone de texte noire opèrent sur la ligne source, comme l'association, le tri ou le filtrage entre 2 tables. Des introductions détaillées seront données plus loin :
L'étape 2 implémente les opérations de boucles imbriquées (équivalentes aux boucles imbriquées dans les instructions C), reçoit les sources de ligne des étapes 3 et 4 et compare chaque ligne de la source à l'étape 3 avec sa source de ligne à l'étape 4. Les lignes correspondantes sont concaténées ensemble et les lignes résultantes sont renvoyées à l'étape 1.
L'étape 1 termine une opération de filtrage. Il reçoit les sources de lignes des étapes 2 et 6, élimine les lignes de l'étape 2 qui ont des lignes correspondantes à l'étape 6 et renvoie les lignes restantes de l'étape 2 à l'utilisateur ou à l'application émetteur.
Mettre en œuvre la séquence des étapes du plan d’exécution
Les étapes du plan d'exécution ne sont pas implémentées dans l'ordre dans lequel elles sont numérotées : Oracle implémente d'abord les étapes qui apparaissent sous forme de feuilles dans le graphique arborescent de la figure 5-1 (par exemple, les étapes 3, 5 et 6). Les lignes renvoyées par chaque étape sont appelées les sources de lignes de l'étape suivante. Oracle implémente ensuite l'étape parent.
Par exemple, pour exécuter l'instruction de la figure 5-1, Oracle implémente ces étapes dans l'ordre suivant :
Tout d'abord, Oracle implémente l'étape 3 et renvoie les lignes de résultats à l'étape 2, ligne par ligne.
Pour chaque ligne renvoyée à l'étape 3, Oracle implémente ces étapes :
-- Oracle implémente l'étape 5 et renvoie le résultat ROWID à l'étape 4.
-- Oracle implémente l'étape 4 et renvoie la ligne de résultat à l'étape 2.
-- Oracle implémente l'étape 2 et acceptera une ligne de l'étape 3 et une ligne de l'étape 4 et reviendra
Donnez une ligne à l’étape 1.
-- Oracle implémente l'étape 6. S'il existe une ligne de résultat, renvoyez-la à l'étape 1.
-- Oracle implémente l'étape 1. Si une ligne est renvoyée à l'étape 6, Oracle renvoie la ligne de l'étape 2 à
L'utilisateur qui a émis l'instruction SQL.
Notez qu'Oracle exécute les étapes 5, 4, 2 et 6 une fois pour chaque ligne renvoyée par l'étape 3. De nombreuses étapes parent ne nécessitent qu'une seule ligne de leurs étapes enfants avant de pouvoir s'exécuter. Pour une telle étape parent, l'étape parent (et éventuellement le reste du plan d'exécution) est implémentée dès qu'une seule ligne a été renvoyée par l'étape enfant. Si l'étape parent de l'étape parent peut également être activée via un retour sur une seule ligne, elle sera également exécutée. Par conséquent, les exécutions peuvent être enchaînées dans l’arborescence, incluant éventuellement le reste du plan d’exécution. Pour de telles opérations, vous pouvez utiliser first_rows comme cible d'optimisation pour répondre rapidement aux demandes des utilisateurs.
Pour chaque ligne récupérée tour à tour par une étape enfant, Oracle implémente une seule fois l'étape parent et toutes les étapes concaténées. Les étapes parent déclenchées pour chaque ligne renvoyée par une étape enfant incluent l'accès aux tables, l'accès aux index, les jointures de boucles imbriquées et les filtres.
Certaines étapes parent nécessitent toutes les lignes des étapes enfants avant de pouvoir être implémentées. Pour une telle étape parent, Oracle ne peut pas implémenter l'étape parent tant que toutes les lignes n'ont pas été renvoyées par l'étape enfant. Ces étapes parentes incluent le tri, la jointure par tri-fusion, la fonction de groupe et le total. Pour une telle opération, first_rows ne peut pas être utilisé comme cible d'optimisation, mais all_rows peut être utilisé comme cible d'optimisation pour que ce type d'opération consomme le moins de ressources.
Parfois, lorsqu'une instruction est exécutée, elle ne se déroule pas étape par étape comme mentionné ci-dessus, mais peut s'exécuter en parallèle. Par exemple, dans un environnement réel, les étapes 3, 5 et 4 peuvent s'exécuter en parallèle pour obtenir une meilleure efficacité. À partir de l'arborescence ci-dessus, il est difficile de voir l'ordre dans lequel chaque opération est exécutée. Cependant, grâce à une autre forme de plan d'exécution généré par ORACLE, il est facile de voir quelle opération est exécutée en premier et laquelle est exécutée plus tard. Le plan d’exécution est ce dont nous avons réellement besoin et sera expliqué en détail plus tard.
Cet article provient du blog CSDN Veuillez indiquer la source lors de la réimpression : http://blog.csdn.net/lcyhjx/archive/2009/12/20/5044799.aspx.
-