Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

हाइबरनेटक्रिटेरा एपीआई और ओरेकल के साथ गतिशील क्वेरी - प्रदर्शन

यहां एक दो चीजें हैं। सबसे पहले, आप एक IN सूची को बाध्य नहीं कर सकते, कम से कम मुझे पूरा यकीन है कि आप नहीं कर सकते। मुझे संदेह है कि हाइबरनेट किसी प्रकार की चाल का उपयोग कर रहा है जिसे आप अपनी सरणी सामग्री को स्थिर सूची में डालते हैं ओरेकल उपयोग कर सकता है।

दूसरे, यदि इस क्वेरी को कई अलग-अलग मापदंडों के साथ निष्पादित किया जाता है, तो आपको चरों को बांधना होगा या पूरे डेटाबेस का प्रदर्शन प्रभावित होगा।

उस ने कहा, एक 'ट्रिक' का उपयोग करके IN सूची को बाँधने का एक तरीका है, जिसका वर्णन टॉम कायटे ने अपने ब्लॉग पर किया है -

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

वहां का कोड इस तरह दिखता है:

[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

भाग:

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

मूल रूप से आपकी क्वेरी कहां जाती है। थोड़ा ऊपर वह चाल है जो अल्पविराम से अलग की गई स्ट्रिंग को मानों की सूची में विभाजित करती है। किसी सूची को :txt प्लेसहोल्डर में बाँधने के बजाय, आपको सूची को एक स्ट्रिंग में बदलना होगा और बस उसे बाइंड करना होगा।

क्या आप सुनिश्चित हैं कि क्वेरी समय में अंतर मशीन पर कैशिंग या लोड विविधताओं के कारण नहीं है? क्वेरी को पार्स करने में थोड़ा समय लगेगा, लेकिन कई सेकंड एक लंबा समय है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में n यादृच्छिक पंक्तियों को अपडेट करें

  2. Oracle DB से छवि प्राप्त करें

  3. मैं कैसे देख सकता हूं कि किसी मालिक के पास ओरेकल में स्टोर प्रक्रिया निष्पादित करने की अनुमति है या नहीं?

  4. ऑरैकल डेटाबेस में क्वेरी के परिणाम में कॉलम को कैसे विभाजित करें?

  5. Oracle PL/SQL को Java क्लासेस/EJB में माइग्रेट करने पर एक विकल्प बनाना