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 [02/11/2020 15:36] hubert [Configurer la police de caractères pour SQLWorkbench] |
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 91: | Ligne 91: | ||
=== SQL Workbench === | === SQL Workbench === | ||
+ | |||
==Configurer la police de caractères pour SQLWorkbench== | ==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, | Pour afficher proprement les plans il faut utiliser la police de caractère "Courrier New". Pour cela, | ||
Ligne 98: | Ligne 99: | ||
- | 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 | + | 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|}} | {{:site:enseignement:licence:3i009:plan_bigannuaire_age18.png?300|}} | ||
Ligne 104: | Ligne 105: | ||
- | |||
==Macros== | ==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... | |
- | 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... | + | |
{{:site:enseignement:licence:3i009:macro1.png?300|}} | {{:site:enseignement:licence:3i009:macro1.png?300|}} | ||
Ligne 115: | Ligne 114: | ||
{{:site:enseignement:licence:3i009:macro2.png?300|}} | {{: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 126: | Ligne 125: | ||
</code> | </code> | ||
- | vous écrivez la requête | + | vous écrivez la requête : |
<code sql> | <code sql> | ||
Ligne 132: | 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**. | ||
Ligne 467: | 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 908: | 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 926: | 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. | ||