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

membandingkan dua kursor di Oracle alih-alih menggunakan MINUS

MINUS adalah operasi set yang, selain mengambil hasil kueri kedua dari yang pertama, juga akan menghapus duplikat jika muncul di set pertama. Dengan demikian, kueri yang ditampilkan akan selalu harus membangun set hasil lengkap dari TABLE_1 sebelum mengembalikannya ke pengguna.

Jika Anda dapat yakin bahwa tidak ada duplikat untuk kepala trimemd/tanggal efektif di set pertama (atau Anda tidak ingin duplikat tersebut dihapus), Anda dapat mencoba

SELECT  RTRIM(LTRIM(A.HEAD)), A.EFFECTIVE_DATE,
    FROM   TABLE_1 A
    WHERE  A.TYPE_OF_ACTION='6'
    AND    A.EFFECTIVE_DATE >= ADD_MONTHS(SYSDATE,-15)
    AND NOT EXISTS 
         (select 1 from table_2 b 
          where RTRIM(LTRIM(b.head)) = RTRIM(LTRIM(a.head))
          and b.effective_date = a.effective_date) )

Dengan begitu kueri dapat mulai mengembalikan hasil lebih cepat, terutama jika table_2 sangat kecil atau baris dapat diakses melalui indeks pada tanggal atau kepala efektif.

PS. Jika Anda bisa, hapus bit RTRIM(LTRIM()).

PPS. Masih tidak ada jaminan itu akan kembali dalam waktu kurang dari 8 detik. Itu akan tergantung pada seberapa besar table_1, dan indeks pada type_of_action dan/atau effective_date.

Ditambahkan:

Anda dapat mengarahkan kursor melalui

SELECT  RTRIM(LTRIM(A.HEAD)), A.EFFECTIVE_DATE,
    FROM   TABLE_1 A
    WHERE  A.TYPE_OF_ACTION='6'
    AND    A.EFFECTIVE_DATE >= ADD_MONTHS(SYSDATE,-15)

dan abaikan baris jika kembali

    select 1 from table_2 b 
      where RTRIM(LTRIM(b.head)) = :1
      and b.effective_date = :1
      and rownum =1

Tapi itu pasti akan memakan waktu lebih lama untuk mengeksekusi seluruhnya. Mungkin urutan besarnya lebih lama (yaitu jam) tergantung berapa lama setiap pemeriksaan table_2 memakan waktu. Tidak begitu yakin kriteria apa yang digunakan untuk cutoff (durasi panggilan atau durasi kursor SQL terbuka), sehingga mungkin menutup kursor luar. Dan bergantung pada ukuran/indeks/isi tabel_1, kursor luar mungkin masih tidak mengembalikan baris pertama dalam jangka waktu tersebut.

Berapa banyak baris dalam table_1, table_2 dan indeks apa yang tersedia?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengoptimal di Oracle Database 19c

  2. Membuat Pengguna Oracle jika belum ada

  3. Wildfly Gagal Memuat Modul untuk Driver Oracle

  4. Bagaimana cara menggunakan pengenal yang dikutip untuk kombinasi nama pengguna + tabel di Oracle?

  5. cara menggunakan entri tns dengan driver macromedia untuk Oracle