Précédent Suivant Index

2  Optimisation des requêtes SQL (4 points)

Étant donné le schéma de la Section 1,

  1. soit la requête suivante:
    select A.AerDep, A.AerArr
      from Vols A, Vols B
     where A.AerArr = B.AerDep
       and A.AerDep = B.AerArr;
    
    1. Supposons qu'il n'y ait pas d'index. Comment cette requête est-elle évaluée? Donnez le plan d'exécution de la requête d'Oracle, utilisez l'outil EXPLAIN et donnez les détails nécessaires à la compréhension. (1 point)
      Solution:
      Plan d'exécution
      -------------------------------------------------------
      0 SELECT STATEMENT
        1 MERGE JOIN
          2 SORT JOIN
            3 TABLE ACCESS FULL VOLS
          4 SORT JOIN
            5 TABLE ACCESS FULL VOLS
      
    2. Supposons qu'on ajoute deux index aer_dep et aer_arr sur les attributs AerDep et AerArr dans la relation Vols. Quel est le plan d'éxécution? (1 point)
      Solution:
      Plan d'exécution
      -----------------------------------------------------------
      0 SELECT STATEMENT
        1 NESTED LOOPS
          2 TABLE ACCESS FULL VOLS
          3 AND-EQUAL
            4 INDEX RANGE SCAN AER_ARR
            5 INDEX RANGE SCAN AER_DEP
      
  2. soit la requête suivante:
    select NomCl
      from Vols, Clients, Avions
     where Comp = 'Air France'
       and Vols.NumVol = Clients.NumVol
       and Vols.NumAv = Avions.NumAv;
    
    L'outil EXPLAIN de Oracle fournit le plan d'exécution suivant:
    Plan d'exécution
    ---------------------------------------------------------------
    0 SELECT STATEMENT
      1 NESTED LOOPS
        2 NESTED LOOPS
          3 TABLE ACCESS FULL CLIENTS
          4 TABLE ACCESS BY ROWID VOLS
            5 INDEX UNIQUE SCAN SYS_C002175
        6 TABLE ACCESS BY ROWID AVIONS
          7 INDEX UNIQUE SCAN SYS_C002173
    
    1. Quels index (table + attribut) doivent exister pour obtenir ce plan d'exécution? (1 point)
    2. Comment est évaluée chacune des jointures? (1 point)
      Solution:

Précédent Suivant Index