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

Optimalisasi kueri oracle

Pertama, tidak perlu distinct . Query dapat ditulis sebagai:

select * 
  from [email protected] 
 where column1 in (
          select column2 
            from [email protected] 
           where column3 > 0
                  ) 
order by column1

Kedua, ada (setidaknya) dua cara lagi untuk menulisnya. Baik dengan JOIN :

select t1.* 
  from [email protected] t1
  join [email protected] t2
 where t2.column2 = t1.column1
   and t2.column3 > 0 
group by
       t1.id, t1.column1, ... 

order by t1.column1

atau (preferensi saya) dengan EXISTS :

select t1.* 
  from [email protected] t1 
 where exists
       ( select *
           from [email protected] 
          where t2.column2 = t1.column1
            and t2.column3 > 0
                  ) 
order by column1

Bagaimanapun, Anda harus memeriksa rencana eksekusi untuk semuanya.

Saya berharap kinerja menjadi yang terbaik jika Anda memiliki indeks di table1.column1 dan untuk table2 , baik indeks pada column2 atau indeks komposit pada (column3, column2)



  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 - ORA-01489:hasil penggabungan string terlalu panjang

  2. Perbarui hanya tanggal pada bidang datetime di Pl/SQL

  3. Apa yang menyebabkan perbedaan antara waktu CPU dan waktu yang telah berlalu dalam file tkprof Oracle?

  4. Bagaimana cara menginstal modul node-Oracledb pada AWS centos6 melalui baris perintah?

  5. kesalahan sintaks saat mendeklarasikan variabel dalam prosedur pl/sql