sql >> Database teknologi >  >> RDS >> Oracle

Kan jeg have et sammensat indeks på, når jeg bruger en venstre join

Det fungerer som forventet. Oracle gjorde præcis, hvad du bad det om.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Du har et sammensat indeks på phonenumber, email , mens du ikke bruger nogen af ​​kolonnerne i filterprædikatet af din forespørgsel:

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

Så der er ingen grund til, at Oracle ville lave en indeksscanningphonenumber, email . Du vælger simpelthen disse kolonner med sammensat nøgle, ikke filtrerer dem:

SELECT Phonenumber, email 
from student left join Xyz

Indeks vil blive brugt, når du PROJEKTERER disse kolonner, ikke kun SELECT . STUDENT tabel som forventet går til en FULL TABLE SCAN da det er et almindeligt valg og ikke bruger noget filter på de indekserede kolonner. Hvis du vil se en indeksscanning, skal du tilføje filteret nedenfor:

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


  1. Kan ikke finde MySQL i NodeJS ved hjælp af AWS Lambda

  2. Dynamisk upsert i postgresql

  3. FEJL! MySQL-manager eller server-PID-fil kunne ikke findes! QNAP

  4. Sådan oprettes forbindelse til SQL Server med Windows-godkendelse fra Node.JS ved hjælp af mssql-modul