Det fungerar som förväntat. Oracle gjorde precis som du bad den att göra.
CREATE INDEX email_phonenumber_student_idx
ON student(phonenumber, email);
Du har ett sammansatt index på phonenumber, email
, medan du inte använder någon av kolumnerna i filterpredikatet av din fråga:
where months_between(SYSDATE, dateofbirth)/12 >= 18
and xyz.studentnumber is null;
Så det finns ingen anledning till varför Oracle skulle göra en indexskanning på phonenumber, email
. Du väljer helt enkelt dessa kolumner med sammansatt nyckel, inte filtrerar dem:
SELECT Phonenumber, email
from student left join Xyz
Index kommer att användas när du PROJEKERAR dessa kolumner, inte bara SELECT . STUDENT
Tabell som förväntat går för en FULL TABLE SCAN
eftersom det är ett vanligt urval och inte använder något filter på de indexerade kolumnerna. Om du vill se en indexgenomsökning, lägg till nedanstående filter:
AND phonenumber = <value>
AND email = <value>