La table Journaliste stocke les informations (Nom, Prenom) sur les
journalistes (JID est le numéro d'identification du journaliste). La
table Journal stocke pour chaque rédaction d'un journal le titre du
journal (Titre), le nom de la rédaction (Redaction) et le JID de son
rédacteur (ReID).
Soit la requête :
select Nom
from Journal, Journaliste
where Titre='Le Monde' And JID=ReID And Prenom='Jean'
(0,5 point) Que calcule cette requête ?
Solution :
Les noms des rédacteurs du journal le Monde qui s'appellent Jean.
Est-ce que les deux requêtes retournent le même résultat (sont
équivalentes)? Est-ce qu'une requête est meilleure que l'autre si on
considère les deux requêtes comme plans d'exécution? Expliquez votre
réponse.
Le titre du journal est une clé au sens relationnel : il n'y a pas deux
journaux ayant le même titre.
On a seulement un index dense sur la table Journaliste sur l'attribut JID :
I-Journaliste-JID.
(0,5 points) Donner le meilleur plan d'exécution physique sous forme
arborescente ou sous forme d'une expression EXPLAIN. Les noeuds de
l'arbre sont des opérateurs comme balayage séquentiel (BS),
traversée d'index (TI), accès direct (par adresse) à une table (AD),
tri, fusion, boucles imbriquées (BI), etc.
(1,5 points) Expliquez en détail ce plan.
Solution :
Réponse : par balayage séquentiel de la table Journal, on obtient
les nuplets correspondant aux rédactions du Monde (sélection sur le
titre). On fait ensuite une jointure par boucles imbriquées : la
valeur de l'attribut ReID de ce nuplet sert de clé d'accès à l'index
I-Journaliste-JID. La traversée de cet index donne les adresses des
nuplets de la table Journaliste correspondant aux rédacteurs du
Monde. Cette table est accédée directement (par adresse du nuplet
correspondant au ReID du Monde). On projette le nuplet obtenu alors
sur le champ Nom après avoir effectué une sélection sur le prénom.
Soit Bal le nombre de blocs de la table Journal et Biste le nombre de
blocs de la table Journaliste. Soit BTI le nombre de blocs lus
lorsqu'on traverse l'index I-Journaliste-JID.
(1 point) Quel est le coût en nombre de lectures de blocs pour
exécuter ce plan ?
(1 point) De combien de buffers a-t-on besoin en mémoire
centrale pour exécuter ce plan (chaque buffer a pour taille
la taille d'un bloc) ?
Solution :
Réponse : Bal + BTI + 1. On a besoin d'un buffer pour lire un bloc
de la table Journal, d'un buffer pour lire le contenu d'un noeud
(feuille) d'index et d'un peu de mémoire pour stocker le nuplet de
Journaliste.