sql >> Base de Datos >  >> RDS >> Oracle

¿Puedo tener un índice compuesto cuando uso una combinación izquierda?

Funciona como se esperaba. Oracle hizo exactamente lo que le pidió que hiciera.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Tiene un índice compuesto en phonenumber, email , mientras no use ninguna de las columnas en el predicado de filtro de su consulta:

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

Entonces, no hay razón por la cual Oracle haría un escaneo de índice en phonenumber, email . Simplemente está SELECCIONANDO esas columnas de clave compuesta, no filtrándolas:

SELECT Phonenumber, email 
from student left join Xyz

Índice se usará cuando PROJECT esas columnas, no solo SELECT . El STUDENT la tabla como se esperaba va para un FULL TABLE SCAN ya que es una selección simple y no usa ningún filtro en las columnas indexadas. Si desea ver que se realiza un escaneo de índice, agregue el siguiente filtro:

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