Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bisakah saya mengaktifkan indeks komposit saat menggunakan gabungan kiri?

Ia bekerja seperti yang diharapkan. Oracle melakukan persis seperti yang Anda minta.

CREATE INDEX email_phonenumber_student_idx
  ON student(phonenumber, email);

Anda memiliki indeks gabungan di phonenumber, email , sementara Anda tidak menggunakan kolom apa pun di predikat filter dari kueri Anda:

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

Jadi tidak ada alasan mengapa Oracle melakukan pemindaian indeks di phonenumber, email . Anda cukup MEMILIH kolom kunci komposit tersebut, bukan memfilternya:

SELECT Phonenumber, email 
from student left join Xyz

Indeks akan digunakan saat Anda PROYEK kolom tersebut, bukan hanya PILIH . STUDENT tabel seperti yang diharapkan berlaku untuk FULL TABLE SCAN karena ini adalah pilihan biasa dan tidak menggunakan filter apa pun pada kolom yang diindeks. Jika Anda ingin melihat pemindaian indeks terjadi, tambahkan filter di bawah ini:

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. Apa pengaturan minimal yang diperlukan untuk menyebarkan aplikasi .NET dengan klien Oracle 11?

  2. Bagaimana cara mengompres hasil Oracle ini menjadi nilai sesuai dengan prioritas baris, mengabaikan nol?

  3. Di mana file jar ojdbc?

  4. Kesalahan SQL:ORA-00907:tanda kurung kanan hilang

  5. Artefak yang hilang com.Oracle:ojdbc6:jar:11.2.0.3