का उपयोग नहीं करती है, मैं अपने आवेदन के प्रदर्शन मुद्दे को हल करने का प्रयास करता हूं। क्वेरी हाइबरनेट उत्पन्न करता है, फार्म की है:हाइबरनेट ऐप से क्वेरी डीबी इंडेक्स
select *
from (
select this.a, this.b, this.state, this.id
from view_user this
where this.state=:1 order by this.a asc, this.b
)
where rownum <= :2
जहां
- आईडी है प्राथमिक कुंजी
- है पर एक संयुक्त, अद्वितीय सूचकांक (ए, बी, आईडी)।
- view_user ~ 2 लाख प्रविष्टियां हैं
- view_user करता है कुछ और अन्य तालिकाओं
अंक
ऊपर क्वेरी प्रदर्शन करने के लिए मिलती है - तेजी से SQLDeveloper से - जल्दी एक छोटी सी जावा app से हाइबरनेट - हाइबरनेट के साथ एप्लिकेशन से बेहद धीमी (> 100x धीमी) - बाध्य चर के लिए मान 2 क्रमशः 30 (पेजिंग से राउनम उत्पत्ति) - हाइबरनेट क्वेरी उपरोक्त फॉर्म "है। वास्तव में दृश्य में लगभग 20 कॉलम हैं।
विश्लेषण के वर्तमान राज्य
- क्वेरी योजना पता चलता है कि सूचकांक जब क्वेरी SQlDeveloper या "छोटे जावा एप्लिकेशन" से आता है प्रयोग किया जाता है।
- क्वेरी योजना से पता चलता है कि पूरा तालिका स्कैन प्रदर्शन कर रहे हैं, बशर्ते क्वेरी
- डीबी ट्रेसिंग केवल दो मतभेदों को दर्शाता है हाइबरनेट एप्लिकेशन से आता है: (SQLDeveloper से) NLS सेटिंग्स और थोड़ा अलग स्वरूपण (व्हाइटस्पेस)। 2.1.8
- JDBC ड्राइवर: इस्तेमाल किया ojdbc14, 5 और 6 में कोई अंतर नहीं बनाता
- ओरेकल बाकी सब कुछ एक ही हो ...
संस्करण
- हाइबरनेट लगता है : 10.2 और 11. कोई फर्क नहीं पड़ता
=> मुझे इस मुद्दे से संबंधित हर संकेत के बारे में खुशी है। मुझे क्या परेशानियां यह तथ्य है कि डीबी ट्रेसिंग ने कोई अंतर नहीं दिखाया ... हाँ, ऐसा लगता है कि यह हाइबरनेट के बारे में कुछ है। पर क्या? कैसे पता लगाया जाए?
पूर्णता के लिए, यहाँ (लॉग से) हाइबरनेट क्वेरी के लिए:
Select * from (
select this.USER_ID as USER_ID0_, this.CLIENT_ID as CLIENT_ID0_,
this.USER_NAME as USER_NAME0_, this.USER_FIRST_NAME as USER_FIR5_0_, this.USER_REMARKS as
USER_REM6_0_, this.USER_LOGIN_ID as USER_LOG7_0_, this.USER_TITLE as USER_TITLE0_,
this.user_language_code as user_lan9_0_, this.USER_SEX as USER_SEX0_,
this.USER_BIRTH_DATE as USER_BI11_0_, this.USER_TELEPHONE as USER_TE12_0_,
this.USER_TELEFAX as USER_TE13_0_, this.USER_MOBILE as USER_MO14_0_,
this.USER_EMAIL as USER_EMAIL0_, this.USER_ADDRESSLINE1 as USER_AD16_0_,
this.USER_ADDRESSLINE2 as USER_AD17_0_, this.USER_POSTALCODE as USER_PO18_0_,
this.USER_CITY as USER_CITY0_, this.USER_COUNTRY_CD as USER_CO20_0_,
this.USER_COUNTRY_NAME as USER_CO21_0_, this.USER_STATE_ID as USER_ST24_0_,
this.USER_STATE as USER_STATE0_, this.USER_TEMP_COLL_ID as USER_TE26_0_,
this.USER_TEMP_COLL_NAME as USER_TE27_0_, this.UNIT_ID as UNIT_ID0_,
this.CLIENT_NAME as CLIENT_38_0_, this.PROFILE_EXTID as PROFILE39_0_
from VIEW_USER this
where this.USER_STATE_ID=:1 order by this.USER_NAME asc, this.USER_FIRST_NAME asc
)
where rownum <= :2
अनोखा सूचकांक user_name, USER_FIRST_NAME, user_id खत्म हो गया है।
मुझे संदेह है कि आपके पास अपनी क्वेरी में एक टाइपो है जिसे आपने यहां दर्ज किया है, क्योंकि आंतरिक चयन में दो 'कहां है। क्या वास्तव में बाहरी चयन पर 'जहां रोउनम' खंड है? – rejj
आप कहते हैं कि "view_user में ~ 2 mio प्रविष्टियां हैं"। कृपया "एमओओ" परिभाषित करें। साथ ही, view_user.state के संभावित मान क्या हैं, और प्रत्येक संभावित मूल्य के लिए कितनी पंक्तियां हैं? आखिरकार, 1 और 2 के लिए कौन से मूल्य प्रदान किए जा रहे हैं? धन्यवाद। –
सूखी, एमओओ लाख है। आंतरिक चयन का पूरा रिटर्न सेट पूर्ण दृश्य (view_user) का लगभग 80% हो सकता है क्योंकि "this.state =: 1" के लिए मान 2 के साथ: 1। –