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:tmeindex [27/10/2020 18:28] hubert [Exercice (préparation et explications)] |
site:enseignement:licence:3i009:tmeindex [17/11/2020 00:34] (Version actuelle) hubert [SQLWorkbench] |
||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
- | ====== TME 4-5 Index ====== | + | ====== TME 4-5 Plan et Index ====== |
L'objectif de ce TME est de comprendre l'utilisation des index pour évaluer des sélections: création d'un index, choix d'un ou plusieurs index pour évaluer une requête, avantages/inconvénients d'un index. Ce TME dure 2 séances : | L'objectif de ce TME est de comprendre l'utilisation des index pour évaluer des sélections: création d'un index, choix d'un ou plusieurs index pour évaluer une requête, avantages/inconvénients d'un index. Ce TME dure 2 séances : | ||
Ligne 33: | Ligne 33: | ||
Pour ceux qui font le TME avec SQLWorkbench, | Pour ceux qui font le TME avec SQLWorkbench, | ||
- | relire les instructions pour ce connecter à [[site:enseignement:documentation:oracle:sqlworkbench|]]. | + | relire les instructions pour se connecter à [[site:enseignement:documentation:oracle:sqlworkbench|]]. |
Tous les fichiers utiles sont dans l'archive ci-dessous : | Tous les fichiers utiles sont dans l'archive ci-dessous : | ||
/* [[https://moodle-sciences.upmc.fr/moodle-2020/mod/resource/view.php?id=76151|tmeIndex.zip]]*/ | /* [[https://moodle-sciences.upmc.fr/moodle-2020/mod/resource/view.php?id=76151|tmeIndex.zip]]*/ | ||
Ligne 92: | Ligne 92: | ||
=== SQL Workbench === | === SQL Workbench === | ||
- | Avec SQL Workench vous pouvez créer les plans des requêtes avec des macros. Pour cela, il faut d'bord charger le fichier WbMacros-optimize.xml dans le menu Macros -> Load Macros... | + | ==Configurer la police de caractères pour SQLWorkbench== |
+ | Pour afficher proprement les plans il faut utiliser la police de caractère "Courrier New". Pour cela, | ||
+ | aller dans le menu Tools -> Options -> Fonts et modifier le champ //Data Font// pour sélectionner **Courrier New, 12** | ||
+ | |||
+ | {{:site:enseignement:licence:3i009:font_pour_plan_execution.png?300|}} | ||
+ | |||
+ | |||
+ | Ensuite le plan s'affiche avec la bonne indentation pour voir l'arbre des opérations : une opération fille est indentée d'un espace à droite par rapport à son parent. Par exemple, l'opération INDEX est sous TABLE ACCESS qui est elle même sous SELECT : | ||
+ | |||
+ | {{:site:enseignement:licence:3i009:plan_bigannuaire_age18.png?300|}} | ||
+ | |||
+ | |||
+ | |||
+ | ==Macros== | ||
+ | Avec SQL Workench vous pouvez créer les plans des requêtes avec des macros. Pour cela, il faut d'abord charger le fichier WbMacros-optimize.xml dans le menu Macros -> Load Macros... | ||
{{:site:enseignement:licence:3i009:macro1.png?300|}} | {{:site:enseignement:licence:3i009:macro1.png?300|}} | ||
Ligne 98: | Ligne 112: | ||
puis | puis | ||
- | {{:site:enseignement:licence:3i009:macro2.png?200|}} | + | {{:site:enseignement:licence:3i009:macro2.png?300|}} |
- | Vous pouvez ensuite générer les plans en vous positionnent sur la reqête et en choisissant le maros correspondant dans le menu des macros. | + | Vous pouvez ensuite générer les plans en vous positionnant sur la requête et en choisissant la macro correspondant dans le menu des macros. |
Exemple: | Exemple: | ||
- | Au lieu d'écrire: | + | Au lieu d'écrire : |
<code sql> | <code sql> | ||
Ligne 111: | Ligne 125: | ||
</code> | </code> | ||
- | vous ecrivez la requête | + | vous écrivez la requête : |
<code sql> | <code sql> | ||
Ligne 117: | Ligne 131: | ||
</code> | </code> | ||
- | et exécutez le macro p3 (touche F1 du clavier) avec le curseur dans la requête. | + | et vous exécutez la macro p3 (touche F1 du clavier) avec le curseur dans la requête. |
Les requêtes du TME se trouvent dans le fichier **tmeindexWb.sql**. | Les requêtes du TME se trouvent dans le fichier **tmeindexWb.sql**. | ||
- | |||
<showif isloggedin> | <showif isloggedin> | ||
Ligne 453: | Ligne 466: | ||
===== Exercice 3. Comparaison de plans d'exécutions équivalents ===== | ===== Exercice 3. Comparaison de plans d'exécutions équivalents ===== | ||
- | Pour une requête donnée, on veut étudier plusieurs plans équivalents afin de comparer le coût de chacun d'entre eux. Rappel pour afficher le coût, utiliser ''@p4'' | + | Pour une requête donnée, on veut étudier plusieurs plans équivalents afin de comparer le coût de chacun d'entre eux. Rappel pour afficher le coût, utiliser ''@p4'' ou la macro associée à la touche **F2** dans SQLWorkbench |
- | === Directive pour forcer/empêcher l'usage d'un index === | + | ==== Directive pour forcer/empêcher l'usage d'un index ==== |
Énumérer les plans équivalents revient à considérer toutes les combinaisons entre utiliser des index ou pas en ajoutant les **directives** ''index(Table Index)'' et ''no_index(Table Index)'' dans les requêtes SQL. Le 1er paramètre est le nom d'une table ou d'un alias déclaré dans la clause ''FROM''. Le 2eme paramètre est le nom d'un index. La syntaxe est détaillée ci-dessous. | Énumérer les plans équivalents revient à considérer toutes les combinaisons entre utiliser des index ou pas en ajoutant les **directives** ''index(Table Index)'' et ''no_index(Table Index)'' dans les requêtes SQL. Le 1er paramètre est le nom d'une table ou d'un alias déclaré dans la clause ''FROM''. Le 2eme paramètre est le nom d'un index. La syntaxe est détaillée ci-dessous. | ||
Ligne 894: | Ligne 907: | ||
===== Questions fréquentes ===== | ===== Questions fréquentes ===== | ||
- | |||
- | - Emacs : avant d'exécuter une requête (avec Ctrl-C Ctrl-C) vérifier qu'elle est bien suivie d'une ligne **entièrement vide** ne contenant aucun espace. | ||
- | |||
- Directives d'optimisation : attention à la syntaxe. Ne pas confondre les caractères //étoile// ***** du commentaire et celui du //select étoile//. La ligne contient 3 caractères étoiles. Le caractère //plus// + est collé au premier caractère étoile. | - Directives d'optimisation : attention à la syntaxe. Ne pas confondre les caractères //étoile// ***** du commentaire et celui du //select étoile//. La ligne contient 3 caractères étoiles. Le caractère //plus// + est collé au premier caractère étoile. | ||
Ligne 912: | Ligne 922: | ||
- La cardinalité estimée (ROWS) d'un opérateur semble être celle de l'opérateur parent. Pour certaines opérations binaires, la cardinalité de l'opération est indiquée sur le fils de droite plutôt que sur l'opération elle même. | - La cardinalité estimée (ROWS) d'un opérateur semble être celle de l'opérateur parent. Pour certaines opérations binaires, la cardinalité de l'opération est indiquée sur le fils de droite plutôt que sur l'opération elle même. | ||
+ | - Emacs : avant d'exécuter une requête (avec Ctrl-C Ctrl-C) vérifier qu'elle est bien suivie d'une ligne **entièrement vide** ne contenant aucun espace. | ||