Index Tdm
Précédent Choix des chemins d'accès
Go up to L'optimiseur de requêtes
Suivant Jointures sans index

Requête portant sur une seule table

L'optimiseur d'interrogation classe les différents types de prédicats en fonction de leur syntaxe dans l'ordre suivant ; du plus sélectif au moins sélectif :
oracle peut dans certains cas utiliser plusieurs index sur une même table (5 au max), y compris pour évaluer des prédicats lies par OR.

Un SELECT avec plusieurs prédicats indexés liés par AND sera exécuté comme une intersection du résultat de plusieurs SELECT bénéficiant chacun d'un index, si les prédicats sont des égalités.

Exemple :


SELECT * 
FROM emp
WHERE nom = 'MARTIN'
AND n_dept = 20;
De même un SELECT avec plusieurs prédicats liés par OR sera exécuté comme une union du résultat de plusieurs SELECT bénéficiant chacun d'un index. Dans ce cas, il faut que tous les prédicats bénéficient d'un index.

Exemple :


SELECT * 
FROM emp
WHERE nom = 'MARTIN'
OR n_dept = 20 ;
Dans ces cas il se peut que l'utilisation de l'un des index soit pénalisante. Ce peut être le cas d'un index peu sélectif, alors que les autres index utilisables sont très sélectifs. Dans ce cas l'on peut empêcher oracle d'utiliser les index inadéquats, en formulant les conditions de telle façon que le critère de recherche soit une fonction de la colonne indexée et non pas la colonne indexée elle même (dans ce cas oracle n'utilise pas l'index).

Exemple :


SELECT * 
FROM emp
WHERE nom = 'MARTIN'
AND n_dept + 0 = 20;
où les champs nom et n_dept sont indexés. Le fait d'ajouter 0 à la colonne n_dept empêche d'utiliser l'index sur n_dept, qui ne ferait que ralentir la requête car il est peu sélectif. L'index sur nom, qui est très sélectif, suffit.

De la même façon, l'on peut concaténer une chaîne vide à une colonne de type caractère pour empêcher oracle d'utiliser l'index sur cette colonne :


SELECT * 
FROM emp
WHERE nom = 'MARTIN'
AND fonction ||''= 'directeur' ;


Index Tdm
Précédent Choix des chemins d'accès
Go up to L'optimiseur de requêtes
Suivant Jointures sans index

Yolaine.Bourda@supelec.fr