Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
site:enseignement:licence:3i009:tmejointure [20/09/2017 17:27] hubert [TME 6 Jointure] |
site:enseignement:licence:3i009:tmejointure [17/11/2020 00:37] (Version actuelle) hubert [Exercice préliminaire] |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
====== TME 6 Jointure ====== | ====== TME 6 Jointure ====== | ||
- | L'objectif de ce TME est de comprendre l'optimisation des requêtes qui contiennent des jointures. | + | /* TME pour 3I009 */ |
- | * Algorithmes de jointures, | + | |
+ | |||
+ | L'objectif de ce TME est de comprendre l'optimisation des requêtes qui contiennent des jointures. Les notions étudiées sont : | ||
+ | * Algorithmes de jointures, | ||
* Ordre des jointures, | * Ordre des jointures, | ||
* Coût d'une requête de jointure, | * Coût d'une requête de jointure, | ||
- | * Forme des arbres de jointure (linéaire à gauche et autre forme), | + | * Forme des arbres de jointure (linéaire à gauche et autre forme), |
* Avantage/inconvénient d'utiliser un index sur l'attribut de jointure et/ou sur d'autres attributs. | * Avantage/inconvénient d'utiliser un index sur l'attribut de jointure et/ou sur d'autres attributs. | ||
Ligne 18: | Ligne 21: | ||
</showif> | </showif> | ||
===== Préparation du TME ===== | ===== Préparation du TME ===== | ||
- | Lire l'énoncé de l'exercice dans le poly de TD: Exercice 3: Club de joueurs | + | Lire l'énoncé de l'exercice dans le poly : TD 4 et 5: Exercice 4: INTRO pour le TME6 Jointures |
+ | |||
+ | |||
+ | Télécharger l'archive du TME: [[https://nuage.lip6.fr/s/6dpYZdLAMHtdHpG|tmeJointure2020.zip]] | ||
+ | |||
+ | Se connecter à [[site:enseignement:documentation:oracle:sqlworkbench|]], charger les macros, puis ajouter les synonymes vers les tables du TME en exécutant la ligne | ||
+ | @synonymJCF | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | /* on enlève cette partie PPTI | ||
^commande^description^ | ^commande^description^ | ||
Ligne 27: | Ligne 41: | ||
| **Alt-x** my/sql-oracle //ou// **Atl-x** sql-oracle | se connecter à Oracle. Voir [[site:enseignement:documentation:oracle:connexionoracle|ConnexionOracle]] | | | **Alt-x** my/sql-oracle //ou// **Atl-x** sql-oracle | se connecter à Oracle. Voir [[site:enseignement:documentation:oracle:connexionoracle|ConnexionOracle]] | | ||
| aller sur le paragraphe contenant @baseJCF et faire Ctrl-C Ctrl-C | créer vos tables J, C, F, les index et les statistiques nécessaires à l'optimisation basée sur le coût| | | aller sur le paragraphe contenant @baseJCF et faire Ctrl-C Ctrl-C | créer vos tables J, C, F, les index et les statistiques nécessaires à l'optimisation basée sur le coût| | ||
+ | */ | ||
+ | |||
+ | |||
Les tables d'un club de sport sont : | Les tables d'un club de sport sont : | ||
Ligne 45: | Ligne 62: | ||
* **I_F_CNUM** sur F(cnum) | * **I_F_CNUM** sur F(cnum) | ||
- | Pour **afficher** les plans proposés par le SGBD et leur coût, commencer chaque requête par | + | Pour **afficher** les plans proposés par le SGBD et leur coût, se placer dans une requête et exécuter la macro p4 (touche F2) |
- | <code ascii> | + | |
+ | /* | ||
+ | <code sql> | ||
explain plan for SELECT ... | explain plan for SELECT ... | ||
</code> | </code> | ||
puis terminer chaque requête par | puis terminer chaque requête par | ||
@p4 | @p4 | ||
+ | */ | ||
Ligne 60: | Ligne 79: | ||
</fs> | </fs> | ||
</showif> | </showif> | ||
+ | |||
===== Exercice préliminaire ===== | ===== Exercice préliminaire ===== | ||
Combien de n-uplets ont chacune des relations ? | Combien de n-uplets ont chacune des relations ? | ||
Quel est le coût d'accès à chaque table ? Rappel : le coût d'un plan se lit dans la colonne Cost de l'opérateur racine (Id=0) | Quel est le coût d'accès à chaque table ? Rappel : le coût d'un plan se lit dans la colonne Cost de l'opérateur racine (Id=0) | ||
<code sql> | <code sql> | ||
- | explain plan for | + | --explain plan for |
select * from J; | select * from J; | ||
- | @p4 | + | --@p4 |
</code> | </code> | ||
Ligne 138: | Ligne 158: | ||
<showif isloggedin> | <showif isloggedin> | ||
- | <fc #008000>le prédicat sur le salaire est maintenant très sélectif</fc> | + | <fc #008000>le prédicat sur le salaire est maintenant assez sélectif pour que le nombre de Joueurs soit inférieur au nombre de Clubs (ça change l'ordre par rapport à la 1ère requête), mais pas assez sélectif pour utiliser l'index</fc> |
</showif> | </showif> | ||
Ligne 150: | Ligne 170: | ||
</code> | </code> | ||
- | a) Afficher et dessiner **P2**. | + | a) Afficher et dessiner le plan **P2** de cette requête. |
<showif isloggedin> | <showif isloggedin> | ||
Ligne 188: | Ligne 208: | ||
- | b) Quel est le coût de **P2** ? | + | c) Quel est le coût de **P2** ? |
<showif isloggedin> | <showif isloggedin> | ||
<fc #008000> | <fc #008000> | ||
Ligne 238: | Ligne 258: | ||
- | b) détailler les étapes de l'évaluation | + | b) Détailler les étapes de l'évaluation |
<showif isloggedin> | <showif isloggedin> | ||
Ligne 250: | Ligne 270: | ||
- | c) Quel est le coût du plan exprimé en fonction du cout pour lire une table, un index et pour lire un nuplet seul. | + | c) Quel est le coût du plan exprimé en fonction du coût pour lire une table, un index et pour lire un nuplet seul. |
<showif isloggedin> | <showif isloggedin> | ||
Ligne 268: | Ligne 288: | ||
=== Question 4) === | === Question 4) === | ||
+ | /* | ||
+ | Jointure par boucles imbriquées avec index sur l'attribut de jointure | ||
+ | */ | ||
On considère la requête **R4**. | On considère la requête **R4**. | ||
Ligne 325: | Ligne 348: | ||
* La directive ''USE_HASH'' indique que la jointure doit être traitée par hachage. | * La directive ''USE_HASH'' indique que la jointure doit être traitée par hachage. | ||
- | Reprendre les requêtes de l'exercice précédent en ajoutant une directive. Expliquer le plan obtenu. | + | Reprendre les requêtes R1 à R4 de l'exercice précédent en ajoutant une directive. Expliquer le plan obtenu. Comparer les plans obtenus avec/sans directive pour une même requête. |