TP1 Oracle SQL Tuning(Hiba Benchaira – G2)
Indexes et méthodes d’accès aux indexes et tables
1. Ouvrir Oracle SQL Developper
2. Etablir une connexion avec l’utilisateur hr à la base de données enfichable pdb.
3. Exécuter ce script pour créer une table de travail EMP :
4. Trouvez tous les indexes appliqués à la table EMP et sur colonnes sont appliqués
5. Exécutez la requête suivante et afficher son plan d’exécution graphiquement :
6. Exécutez la requête SQL suivante et afficher son plan d’exécution. Qu’est ce que vous
constatez ?
Créez un nouvel index appelé « EMP_LASTNAME_IDX » sur la colonne last_name de la table EMP.
Exécutez à nouveau la requête de la question 6 et afficher à nouveau le plan d’exécution. Quelle
méthode d’accès utilisée ? Quel est le coût total d’exécution ?
7. Exécuter la requête SQL suivante et afficher son plan d’exécution. Pourquoi l’optimiseur d’oracle
a appliqué un Fast Full Scan comme méthode d’accès.
Si l'optimiseur utilise un FAST FULL SCAN au lieu de l'index, c'est généralement parce que :
- La requête demande beaucoup de lignes (faible sélectivité)
- Le FAST FULL SCAN est plus performant car il lit les blocs en parallèle
- Tous les champs nécessaires sont dans l'index (index covering)
8. Cette fois-ci, nous voulons créer un index sur le numéro de téléphone. Quel type d’index à
appliquer ? Afficher les contraintes appliquées à la table EMP ? et Insérer un nouvel
enregistrement dans la table EMP comme suit :
Pour un numéro de téléphone, un index B-tree standard est recommandé car :
- Les numéros de téléphone sont uniques
- Les recherches sont exactes
- La cardinalité est élevée
9. Exécuter la requête SQL suivante et afficher son plan d’exécution. Qu’est ce que vous
constatez ? Qu’est ce que vous recommandez pour optimiser l’exécution de cette requête ?
10. Exécuter la requête SQL suivante et afficher son plan d’exécution. Qu’est ce que vous
recommandez pour optimiser l’exécution de cette requête ?
La différence entre les deux exécutions avec et sans le prédicat hire_date montre l'importance de l'ordre
des colonnes dans un index composite.
- Avec tous les prédicats : INDEX RANGE SCAN possible
- Sans hire_date : peut-être INDEX SKIP SCAN si first_name n'est pas la première colonne de l'index
11.
Pour la colonne Gender qui n'a que deux valeurs possibles (M/F), un index bitmap serait plus approprié
qu'un index B-tree car :
- Faible cardinalité (seulement 2 valeurs distinctes)
- Bon pour les colonnes avec peu de valeurs distinctes
- Efficace pour les opérations AND/OR
```sql
CREATE BITMAP INDEX EMP_GENDER_IDX ON EMP(Gender);
```