Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Posso ter um índice composto ao usar uma junção esquerda


Funciona como esperado. A Oracle fez exatamente o que você pediu.
CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Você tem um índice composto em phonenumber, email , embora você não use nenhuma das colunas no predicado de filtro da sua consulta:
where months_between(SYSDATE, dateofbirth)/12 >= 18 
and  xyz.studentnumber is null;

Portanto, não há razão para que a Oracle faça uma verificação de índice em phonenumber, email . Você está simplesmente SELECIONANDO essas colunas de chave composta, não as filtrando:
SELECT Phonenumber, email 
from student left join Xyz

Índice será usado quando você PROJETAR essas colunas, não apenas SELECT . O STUDENT tabela como esperado vai para um FULL TABLE SCAN pois é uma seleção simples e não usa nenhum filtro nas colunas indexadas. Se você quiser ver uma verificação de índice acontecendo, adicione o filtro abaixo:
AND phonenumber = <value>
AND email = <value>