Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:licence:3i009:tmejointure

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [23/02/2018 14:48]
hubert [Exercice préliminaire]
site:enseignement:licence:3i009:tmejointure [17/11/2020 00:37] (Version actuelle)
hubert [Exercice préliminaire]
Ligne 2: Ligne 2:
  
 ====== TME 6 Jointure ====== ====== TME 6 Jointure ======
 +
 +/*   TME pour 3I009 */
 +
  
 L'​objectif de ce TME est de comprendre l'​optimisation des requêtes qui contiennent des jointures. Les notions étudiées sont : L'​objectif de ce TME est de comprendre l'​optimisation des requêtes qui contiennent des jointures. Les notions étudiées sont :
Ligne 19: Ligne 22:
 ===== Préparation du TME ===== ===== Préparation du TME =====
 Lire l'​énoncé de l'​exercice dans le poly : TD 4 et 5:  Exercice 4: INTRO pour le TME6 Jointures 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 63: Ligne 82:
 ===== 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)
 <code sql> <code sql>
-explain plan for+--explain plan for
     select * from J;     select * from J;
-@p4+--@p4
 </​code>​ </​code>​
  
-Combien de pages ont  chacune des relations ? 
-<code sql> 
-select 
-from user_tables 
-</​code>​ 
- 
-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) 
  
 ===== Exercice 1 : Jointure entre 2 relations ===== ===== Exercice 1 : Jointure entre 2 relations =====
Ligne 145: 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 157: 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 195: 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 245: Ligne 258:
  
  
-b) détailler ​les étapes de l'​évaluation+b) Détailler ​les étapes de l'​évaluation
  
 <showif isloggedin>​ <showif isloggedin>​
Ligne 257: 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 275: 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 332: 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.
  
  
site/enseignement/licence/3i009/tmejointure.1519393698.txt.gz · Dernière modification: 23/02/2018 14:48 par hubert