select * from t_client c, t_ventes v where c.pk_num=v.fk_client ;
Plan d'exécution
-----------------------------
0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=5 Card=409 Bytes=38446)
1 0 HASH JOIN (Cost=5 Card=409 Bytes=38446)
2 1 TABLE ACCESS (FULL) OF 'T_VENTES' (Cost=2 Card=82 Bytes=5330)
3 1 TABLE ACCESS (FULL) OF 'T_CLIENT' (Cost=2 Card=409 Bytes=11861)
Exécuter le script "utlxplan.sql" permettant de créer la table dans laquelle sera inscrite le plan d'exécution, puis les commandes d'activation du traçage des plans d'exécution.
set autotrace on
alter session set optimizer_mode="all_rows";
On notera les indicateurs suivants pour chaque ligne du plan :
Cost est un indicateur de coût de calcul de la requête à ce stade (exemple : le coût de l'opération de balayage de la table t_client est de 2). Cet indicateur est une synthèse estimée des différents coûts (accès disque, CPU, etc.), sans unité qui ne sert donc qu'à comparer différents plans entre eux.
Card est une estimation a priori du nombre de lignes remontées par la requête à ce stade (exemple : le nombre de lignes remontées par la jointure est de 409).
Bytes est le volume de données concernée par la requête à ce stade (exemple : le volume global de données pour le SELECT est de 38446 octets).
ANALYZE TABLE nom_table COMPUTE STATISTICS;
Pour que les plans soient correctement évalués a priori - et donc que Oracle fasse les bons choix d'optimisation - il est nécessaire d'exécuter les instructions ANALYSE.
Les statistiques doivent être recalculées après chaque modification de la structure de la base ainsi qu'après chaque changement significatif des données.