sql >> Databáze >  >> RDS >> Oracle

Mohu mít zapnutý složený index při použití levého spojení

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>


  1. Jak vybrat vše před/po určitém znaku v MySQL – SUBSTRING_INDEX()

  2. Co je časový limit připojení v řetězci připojení serveru SQL?

  3. proč pdo->lastInsertId() vrací 0, když volám ULOŽENÝ PROCEDUR v mysql?

  4. Předejte seznam celých čísel z C# do uložené procedury Oracle