Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kann ich einen zusammengesetzten Index haben, wenn ich einen linken Join verwende?

Es funktioniert wie erwartet. Oracle hat genau das getan, worum Sie es gebeten haben.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Sie haben einen zusammengesetzten Index für phonenumber, email , während Sie keine der Spalten im Filterprädikat verwenden Ihrer Anfrage:

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

Es gibt also keinen Grund, warum Oracle einen Index-Scan durchführen sollte unter phonenumber, email . Sie wählen einfach diese Spalten des zusammengesetzten Schlüssels aus und filtern sie nicht:

SELECT Phonenumber, email 
from student left join Xyz

Index wird verwendet, wenn Sie PROJEKTIEREN diese Spalten, nicht nur SELECT . Der STUDENT table gilt wie erwartet für einen FULL TABLE SCAN da es sich um eine einfache Auswahl handelt und keine Filter für die indizierten Spalten verwendet werden. Wenn Sie sehen möchten, dass ein Index-Scan stattfindet, fügen Sie den folgenden Filter hinzu:

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