2011-01-05 15 views
7

के साथ हाइबरनेट मानदंड 'ilike प्रश्नों' को कैसे गति दें हम ओरेकल (11) के साथ हाइबरनेट का उपयोग कर रहे हैं और 'ilike', केस असंवेदनशील 'जैसे' के उपयोग के कारण गंभीर प्रदर्शन समस्याएं हैं।ऑरैकल डेटाबेस

जावा/हाइबरनेट कोड की तरह दिखता है:

c1.add(Restrictions.ilike("address", address)); 

जो की तरह

select * from ACCOUNT where lower(ADDRESS_1) = ? 

'कम' समारोह यह असंभव ओरेकल एक सूचकांक है, जिसमें परिणाम का उपयोग करने के लिए बनाता है एक एसक्यूएल बयान में परिणाम एक पूर्ण टेबल स्कैन।

मैं डीबी तालिका में एक नया कॉलम पेश करने के बारे में सोच रहा था जिसमें पते की निचली केस सामग्री शामिल है। मैं तो इस्तेमाल कर सकते हैं:

c1.add(Restrictions.ilike("addressLCase", address.toLowerCase())); 

... लेकिन मैं वास्तव में विचार सामग्री दो बार स्टोर करने के लिए पसंद नहीं है ...

तब मैं लोअर केस

साथ एक सूचकांक बनाने के बारे में सोचा
CREATE INDEX ADDRESS_1_IDX ON ACCOUNT lower( ADDRESS_1 ) ; 

लेकिन यह काम नहीं किया, के बाद से मैं इस सूचकांक का उपयोग करने के अनुकूलक को समझाने नहीं कर सकते हैं ...

तो क्या मैं हाइबरनेट मापदंड एपीआई के साथ एक तेजी से क्वेरी बनाने के लिए क्या कर सकते हैं और 'मुझे पसंद है' ?

उत्तर

5

फ़ंक्शन आधारित इंडेक्स मेरी पसंद होगी। बस याद रखें:

  • लागत आधारित अनुकूलक का उपयोग करें। फ़ंक्शन आधारित इंडेक्स केवल लागत आधारित अनुकूलक के लिए दृश्यमान होते हैं और इन्हें नियम आधारित अनुकूलक द्वारा कभी भी उपयोग नहीं किया जाएगा।

this आलेख से उद्धरण।

संबंधित मुद्दे