Oracle
 sql >> база данни >  >> RDS >> Oracle

Мога ли да имам съставен индекс, когато използвам ляво съединение

Работи според очакванията. Oracle направи точно това, което поискахте от него.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Имате съставен индекс на phonenumber, email , докато не използвате нито една от колоните в предиката за филтър на вашата заявка:

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

Така че няма причина Oracle да направи сканиране на индекс на phonenumber, email . Вие просто избирате тези колони от съставен ключ, а не ги филтрирате:

SELECT Phonenumber, email 
from student left join Xyz

Индекс ще се използва, когато ПРОЕКТИРАТЕ тези колони, а не само SELECT . STUDENT таблицата, както се очаква, отива за FULL TABLE SCAN тъй като е обикновен избор и не използва никакъв филтър върху индексираните колони. Ако искате да видите сканиране на индекс, добавете филтър по-долу:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle TO_DATE не работи

  2. Блокирано извикване на недефинирана функция oci_connect() с помощта на XAMPP

  3. Как да извлека стойности от вложена процедура на Oracle?

  4. Изтриване на таблици от база данни Oracle 10g

  5. Разлика между count(1) и count(*) в Oracle