Précédent Index

6   (trèfle)Optimisation

ORACLE fournit sous SQLPLUS un outil, EXPLAIN, qui donne une description du plan d'exécution choisi par le système pour une requête quelconque. EXPLAIN est très simple à utiliser. Il fonctionne de la manière suivante :
  1. Tout d'abord on crée une table, plan_table, qui est destinée à contenir toutes les informations relatives à un plan d'exécution. La table doit être créée avec le fichier de commandes plan_table.sql2.

  2. Ensuite on exécute une requête en demandant le stockage des explications relatives à cette requête. Exemple :
         EXPLAIN PLAN 
                SET statement_id = 'cin0'
                FOR SELECT titre, heure_debut
                    FROM   seance s, film f
                    WHERE  s.id_film = f.id_film
                    AND    f.titre='Vertigo';
    
    La clause 'statement_id = 'cin0'' attribue un identifiant au plan d'exécution de cette requête dans la table plan_table. Bien entendu chaque requête stockée dans plan_table doit avoir un identifiant spécifique.

  3. Pour connaître le plan d'exécution, on interroge la table plan_table. L'information est un peu difficile à interpréter : le plus simple est de faire tourner le fichier explain.sql (à récupérer au même endroit que précédemment). Quand on exécute ce fichier, il demande (2 fois) le nom de la requête à expliquer. Dans le cas de l'exemple ci-dessus, on répondrait deux fois 'cin0'. On obtient l'affichage suivant qui présente de manière relativement claire le plan d'exécution (cf. le cours).
        Plan d'execution
        ---------------------------------------------------------------------------
        0 SELECT STATEMENT
          1 NESTED LOOPS
            2 TABLE ACCESS FULL SEANCE
            3 TABLE ACCESS BY ROWID FILM
              4 INDEX UNIQUE SCAN SYS_C004709
    
    Ici, le plan d'exécution est le suivant : on parcourt en séquence la table SEANCE (ligne 2) ; pour chaque séance, on accède à la table FILM par l'index3 (ligne 4), puis pour chaque ROWID provenant de l'index, on accède à la table elle-même (ligne 3). Le tout est effectué dans une boucle imbriquée (ligne 1).
Questions
  1. Reprendre les requêtes définies au début du TP sur la base de données 'Officiel des Spectacles', et expliquer le plan d'exécution donné par ORACLE.
  2. Supprimer quelques index, et regarder le changement dans les plans d'exécutions. NB : vous pouvez obtenir la liste des index existant sur vos tables avec la commande :
              SELECT table_name, index_name FROM user_indexes;
       

Précédent Index