में यूनियन-सबक्लास के जेनरेट किए गए SQL के कारण होने वाले प्रदर्शन समस्याओं को कैसे दूर करें I TABLE_PER_CLASS विरासत रणनीति के लिए हाइबरनेट समर्थन का उपयोग कर रहा हूं। कार्यक्षमता के अनुसार यह अच्छी तरह से काम करता है। जब भी बहुरूपी क्वेरी जारी किया जाता है हाइबरनेट मेरे दो ठोस वर्ग के लिए युक्त "संघ सभी" एक एसक्यूएल उत्पन्न करता है एक & बी उत्पन्न एसक्यूएल निम्न स्वरूप है:हाइबरनेट
select C1, C2, C3 from (
select C1, C2, C3 from ClassA
union all
select C1, C2, C3 from ClassB
)
where
C1 == <value>
order by C2
limit 100
समस्या इस दृष्टिकोण डीबी पर वास्तव में खराब प्रदर्शन से ग्रस्त है पक्ष। सी 1 कॉलम को ध्यान में रखते हुए क्लासए और क्लासबी (अमूर्त माता-पिता से व्युत्पन्न) की एक साझा संपत्ति है, हाइबरनेट दोनों उप चयनों में जहां खंड और नाटकीय रूप से प्रदर्शन में सुधार कर सकता है। उदाहरण के लिए,
select C1, C2, C3 from (
select C1, C2, C3 from ClassA where C1 == <value>
union all
select C1, C2, C3 from ClassB where C1 == <value>
)
order by C2
limit 100
कुछ अनुकूलन सीमा पर भी किया जा सकता है। मैं अपने डीएओ परत में हाइबरनेट मानदंड API का उपयोग कर रहा हूं।
इंटरसेप्टर, onPrepareStatment() का उपयोग नहीं किया जा सकता क्योंकि तर्क दिखाई नहीं दे रहे हैं। डीबी पर विभाजन और संभावित रूप से अन्य विकल्पों का उपयोग वर्तमान में दायरे से बाहर है क्योंकि हम काम के इस चरण में डीबी विशिष्ट अनुकूलन से बचना चाहते हैं।
कोई विचार प्रदर्शन को बेहतर बनाने के लिए हाइबरनेट में हेरफेर कैसे करें?
क्या आप अधिक स्पष्ट हो सकते हैं - अब उत्पन्न SQL क्वेरी और वेरिएंट दें जिससे बेहतर प्रदर्शन होगा। – gkamal
अंतर्निहित डेटाबेस क्या है? मुझे लगता है कि यह ओरेकल नहीं होगा, क्योंकि यह आम तौर पर उप-चयनों और यूनियनों में भविष्यवाणी करता है ... क्या सी 1' दोनों टेबलों में उचित सूचकांक है? –
सी 1 दोनों टेबलों पर एक सूचकांक है। हम उनमें से कई डीबी का समर्थन कर सकते हैं, उनमें से डर्बी (शुद्ध जावा)। नतीजतन वर्तमान फोकस एक स्कीमा को परिभाषित करना है जो सभी डेटाबेस के लिए सर्वश्रेष्ठ प्रदर्शन प्रदान करेगा। – user1392212