Blocs de requête

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. Elle peut contenir d'autres sous-requêtes dans la clause FROM, la clause WHERE ou une sous-requête 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
Pour une sous-requête non corrélée, le noeud du bloc de requête est relié à droite du noeud du bloc de requête de la sous-requête parent la plus élevée qui n'est pas corrélée.
Sous-requête corrélée
Pour une sous-requête corrélée, le noeud du bloc de requête est relié à la partie de sa sous-requête parent dans laquelle la sous-requête corrélée est exécutée.

Commentaires