Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dynamiczne zapytania z HibernateCritera API i Oracle - wydajność

Jest tu kilka rzeczy. Po pierwsze, nie możesz powiązać listy IN, przynajmniej jestem pewien, że nie. Podejrzewam, że Hibernate używa jakiejś sztuczki, którą umieszczasz zawartość tablicy w statycznej liście, z której może korzystać Oracle.

Po drugie, jeśli to zapytanie jest wykonywane z wieloma różnymi parametrami, musisz powiązać zmienne, w przeciwnym razie ucierpi wydajność całej bazy danych.

To powiedziawszy, istnieje sposób na powiązanie listy IN za pomocą „sztuczki”, którą Tom Kyte opisuje na swoim blogu -

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

Kod tam wygląda tak:

[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

Część:

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

To w zasadzie miejsce, do którego trafia Twoje zapytanie. Powyższy bit to sztuczka, która dzieli ciąg oddzielony przecinkami na listę wartości. Zamiast wiązać listę z symbolem zastępczym :txt, musisz przekonwertować listę na ciąg i po prostu ją powiązać.

Czy na pewno różnica w czasie wykonywania zapytań nie wynika z buforowania lub zmian obciążenia na komputerze? Parsowanie zapytania zajmie trochę czasu, ale kilka sekund to dużo czasu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przydatne zapytania dotyczące wygaśnięcia/zasady/ustawień hasła Oracle EBS

  2. Oracle:Jak wywołać przeciążoną procedurę?

  3. Jak uzyskać dostęp do struktury i uzyskać listę kolumn, typy danych refcursora?

  4. Podłączanie Excel VBA do Oracle DB za pomocą „ODBC”

  5. problem z hibernacją oracle10g