Oracle
 sql >> Base de données >  >> RDS >> Oracle

Puis-je avoir un index composite lors de l'utilisation d'une jointure gauche

Cela fonctionne comme prévu. Oracle a fait exactement ce que vous lui avez demandé de faire.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Vous avez un index composite sur phonenumber, email , alors que vous n'utilisez aucune des colonnes du prédicat de filtre de votre requête :

where months_between(SYSDATE, dateofbirth)/12 >= 18 
and  xyz.studentnumber is null;

Il n'y a donc aucune raison pour qu'Oracle fasse une analyse d'index sur phonenumber, email . Vous sélectionnez simplement ces colonnes de clé composite, sans les filtrer :

SELECT Phonenumber, email 
from student left join Xyz

Index sera utilisé lorsque vous PROJETEZ ces colonnes, pas seulement SELECT . L'STUDENT table comme prévu va pour un FULL TABLE SCAN car il s'agit d'une simple sélection et n'utilise aucun filtre sur les colonnes indexées. Si vous souhaitez voir une analyse d'index se produire, ajoutez le filtre ci-dessous :

AND phonenumber = <value>
AND email = <value>