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

Kueri dinamis dengan HibernateCritera API &Oracle - kinerja

Ada beberapa hal di sini. Pertama-tama, Anda tidak dapat mengikat daftar IN, setidaknya saya cukup yakin Anda tidak bisa. Saya menduga Hibernate menggunakan semacam trik yang Anda masukkan ke dalam daftar isi array statis yang dapat digunakan Oracle.

Kedua, jika kueri ini dijalankan dengan banyak parameter berbeda, Anda harus mengikat variabel atau kinerja seluruh database akan terganggu.

Konon, ada cara untuk mengikat daftar IN menggunakan 'trik' yang dijelaskan Tom Kyte di blognya -

http://tkyte.blogspot.com/2006/01/how -can-i.html

Kode di sana terlihat seperti:

[email protected]> with bound_inlist
2  as
3  (
4  select
5    substr(txt,
6           instr (txt, ',', 1, level  ) + 1,
7           instr (txt, ',', 1, level+1) - instr (txt, ',', 1, level) -1 )
8           as token
9    from (select ','||:txt||',' txt from dual)
10  connect by level <= length(:txt)-length(replace(:txt,',',''))+1
11  )
12  select *
13    from all_users
14   where user_id in (select * from bound_inlist);

USERNAME                          USER_ID CREATED
------------------------------ ---------- ---------
SYSTEM                                  5 30-JUN-05
OPS$TKYTE                             104 20-JAN-06

Bagian:

12  select *
13    from all_users
14   where user_id in (select * from bound_inlist);

Pada dasarnya di mana permintaan Anda pergi. Bit di atas adalah trik yang membagi string yang dipisahkan koma menjadi daftar nilai. Alih-alih mengikat daftar ke dalam tempat penampung :txt, Anda perlu mengonversi daftar menjadi string dan hanya mengikatnya.

Apakah Anda yakin perbedaan waktu kueri bukan karena caching atau variasi beban pada mesin? Mengurai kueri akan memakan waktu sedikit, tetapi beberapa detik adalah waktu yang lama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menemukan PEMILIK objek di Oracle?

  2. Hitung jumlah elemen dalam string yang dipisahkan koma di Oracle

  3. Bagaimana cara menghasilkan penggabungan dua set data dengan pernyataan SQL pilih (Oracle DBMS)?

  4. Berapa jumlah baris maksimum dalam tabel bersarang oracle?

  5. Muat lembar data Excel ke database Oracle