Enseignante responsable : Année Universitaire : 2023/2024
Leila Ghorbel Section : LGSI2
Enseignantes tp :
Manel Mili -- Asma Bahba – Manel Chnini Matière : Administration des bases de données
TP4
Objectif
• Création des vues et des index
Soit la base de données relationnelle suivante :
– Individu (num_ind, nom, prenom)
– Jouer (num_ind, num_film, role)
– Film (num_film, num_ind, titre, genre, annee)
– Projection (num_cine, num_film, pdate)
– Cinéma (num_cine, nom,adresse)
Travail à faire
1. Créer une vue permettant de visualiser tous les réalisateurs de film dramatique avec les
nom et prénom du réalisateur, le titre du film et l’année. Vérifier son contenu avec un
SELECT.
2. Créer la vue qui permettra de mettre à jour la colonne année de la table film. On ne veut
que les films créés avant 2021. Vérifier son contenu avec un SELECT.
3. Vérifier que vous pouvez modifier l’année du film 'le voyageur' en passant l’année à
2021 via la vue. Constater.
4. Modifier à nouveau l’année du film 'le voyageur' en rétablissant l’année à 2020. Constater.
5. Donner une solution permettant de mettre à jour les années de la table Film en vérifiant
que l’année saisie soit avant 2021.
6. Tenter de mettre à jour le film 'la quête' en mettant la valeur année à 2022. Constater.
7. On s’aperçoit qu’on a souvent besoin d’avoir des informations à partir du nom d’un
individu. On suppose que la taille de la table Individu est très importante et que les mises
à jour sont négligeables. Que faut-il faire pour accélérer les recherches ?
8. On s’aperçoit maintenant que les recherches s’effectuent le plus souvent sur le nom et le
prénom. Que préconisez-vous ?
9. On vous demande de vérifier l’utilisation de l’index en affichant le plan d’exécution des
requêtes suivantes :
I. SELECT * FROM Individu WHERE nom IS NULL;
II. SELECT * FROM Individu WHERE nom LIKE ‘L%’;
III. SELECT * FROM Individu WHERE substr(nom,1,1) = ‘L’ ;
Pour les 3 requêtes :
- Afficher le plan d’exécution à l’aide de la syntaxe suivante : EXPLAIN PLAN FOR
requête SQL à vérifier
- Afficher le résultat sous la forme d’un tableau en utilisant la table plan_table :
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY) ;
1
NB :
Vous pouvez déterminer si un index est utilisé en examinant le plan d'exécution généré
par Oracle pour votre requête. Voici comment vous pouvez le faire en utilisant la
commande EXPLAIN PLAN FOR et DBMS_XPLAN.DISPLAY :
1) Exécutez votre requête avec EXPLAIN PLAN FOR :
EXPLAIN PLAN FOR
SELECT * FROM Individu WHERE votre_condition;
Assurez-vous de remplacer votre_condition par la condition spécifique de votre requête.
2) Affichez le plan d'exécution avec DBMS_XPLAN.DISPLAY :
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
Cette requête affichera le plan d'exécution. Recherchez les informations relatives à
l'utilisation d'index dans la sortie.
Si un index est utilisé, vous verrez des opérations telles que "INDEX RANGE SCAN",
"INDEX FULL SCAN", ou "INDEX UNIQUE SCAN". Le nom de l'index sera
également indiqué.
Exemple de sortie indiquant l'utilisation d'un index :
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | ... | ... | ... (0) | ... |
| 1 | TABLE ACCESS FULL | table | ... | ... | ... (0) | ... |
Dans cet exemple, l'opération est "TABLE ACCESS FULL", ce qui indique qu'aucun
index n'est utilisé. Si l'opération était "INDEX RANGE SCAN", cela indiquerait
l'utilisation d'un index.
3) Examinez les opérations dans la colonne "Operation" :
Si vous voyez des opérations liées aux index, cela indique que les index sont utilisés.
Les opérations telles que "TABLE ACCESS" sans mention d'index peuvent indiquer
une recherche linéaire (balayage de la table entière) sans l'utilisation d'index.