Graphiques de plan d'accès

Un graphique de plan d'accès affiche sous forme graphique le plan d'accès à toute instruction pour laquelle l'assistant de flux de travaux peut réunir des données EXPLAIN.

Lorsque DB2 traite une requête SQL, l'optimiseur DB2 génère plusieurs plans alternatifs pour accéder aux données demandées. L'optimiseur estime le coût d'exécution de chaque plan et exécute le plan dont le coût est le plus faible. Ce plan est appelé plan d'accès.

Un graphique de plan d'accès se compose de noeuds et de lignes qui relient ces noeuds. Les noeuds représentent les sources de données, opérateurs, instructions SQL et blocs de requêtes. Les noeuds ne peuvent avoir qu'un seul noeud parent, mais ils peuvent avoir un nombre illimité de noeuds enfant. Les flèches sur les arêtes indiquent le sens d'exécution. Généralement, un noeud de table se trouve au bas du graphique et le plan d'accès part vers le haut à partir de ce point.

Certaines opérations du plan d'accès, telles que des jointures par boucle imbriquée ou des balayages d'index, sont représentées dans le graphique par groupes de noeuds, appelés constructions. Un grand nombre de ces constructions disposent d'un noeud de définition qui indique l'opération. Par exemple, le noeud HBJOIN indique qu'une opération de jointure hybride a lieu, mais la jointure hybride complète est représentée dans le graphique par un groupe de noeuds. Ce groupe de noeuds représente toutes les autres sources de données et opérations qui sont impliquées dans l'association hybride.

Une instruction SQL peut être constituée de plusieurs sous-requêtes représentées par des blocs de requête dans le diagramme du plan d'accès. La sous-requête peut être une instruction SELECT, INSERT, UPDATE ou DELETE. Une sous-requête peut contenir d'autres sous-requêtes dans la clause FROM, la clause WHERE ou une sous-sélection d'une clause UNION ou UNION ALL. Une sous-requête figurant dans une autre sous-requête est appelée sous-requête enfant. Une sous-requête contenant une autre sous-requête est appelée sous-requête parent. Cette relation parent-enfant peut être représentée par une hiérarchie arborescente.

Si une sous-requête renvoie au moins à une colonne de sa sous-requête parent ou de ses sous-requêtes parent qui se trouvent plus haut dans l'arborescence, la sous-requête est une sous-requête corrélée, sinon il s'agit d'une sous-requête non corrélée. Cette dernière peut s'exécuter en même temps que la sous-requête parent la plus élevée dans la hiérarchie qui est également non corrélée. Cette sous-requête parent la plus élevée est également appelée "sous-requête parent do-at-open" en termes de ses relations avec la sous-requête non corrélée. L'exécution d'une sous-requête corrélée est liée à celle de sa sous-requête parent. Les relations de ce type entre les exécutions relatives des parents et enfants peuvent être représentées par des hiérarchies arborescentes distinctes dans le graphique de plan d'accès.

Sous-requête non corrélée
Le noeud de bloc de requêtes est connecté au côté droit du noeud de bloc de requêtes correspondant à la sous-requête parente la plus élevée qui est également sans corrélation.
Sous-requête corrélée
Le noeud de bloc de requêtes est connecté à la partie de sa sous-requête parente où la sous-requête corrélée est exécutée.

Commentaires