Funguje podle očekávání. Oracle udělal přesně to, o co jste ho požádali.
CREATE INDEX email_phonenumber_student_idx
ON student(phonenumber, email);
Máte složený index pro phonenumber, email
, zatímco nepoužíváte žádný ze sloupců v predikátu filtru vašeho dotazu:
where months_between(SYSDATE, dateofbirth)/12 >= 18
and xyz.studentnumber is null;
Není tedy žádný důvod, proč by Oracle prováděl indexové skenování na phonenumber, email
. Tyto sloupce složeného klíče jednoduše VYBÍRÁTE, nikoli je filtrujete:
SELECT Phonenumber, email
from student left join Xyz
Index bude použito, když PROJEKTUJETE tyto sloupce, nejen SELECT . STUDENT
tabulka podle očekávání platí pro FULL TABLE SCAN
protože se jedná o prostý výběr a nepoužívá žádný filtr na indexované sloupce. Pokud chcete vidět, jak probíhá skenování indexu, přidejte níže filtr:
AND phonenumber = <value>
AND email = <value>