यहां एक दो चीजें हैं। सबसे पहले, आप एक 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 प्लेसहोल्डर में बाँधने के बजाय, आपको सूची को एक स्ट्रिंग में बदलना होगा और बस उसे बाइंड करना होगा।
क्या आप सुनिश्चित हैं कि क्वेरी समय में अंतर मशीन पर कैशिंग या लोड विविधताओं के कारण नहीं है? क्वेरी को पार्स करने में थोड़ा समय लगेगा, लेकिन कई सेकंड एक लंबा समय है।