मुझे लगता है कि इस कोड के साथ क्या हो रहा है:
SQLQuery query = session.createSQLQuery("myNamedNativeQuery");
query.setParameter(nameParameter1, value1);
query.setParameter(nameParameter2, value2);
query.uniqueResult();
क्या यह है:
पंक्ति 1 पर :आपके नामित मापदंडों के लिए कुछ अपेक्षित मूल्यों के आधार पर एक क्वेरी योजना बनाई जाती है।
पंक्ति 4 पर:क्वेरी को मान 1 और मान 2 के साथ निष्पादित किया जाता है, लेकिन वे मान क्वेरी योजना के लिए "अच्छे मूल्य" नहीं हैं जो कि पंक्ति 1 पर विस्तृत थी और इसलिए, डेटाबेस वास्तविक मूल्यों के लिए एक बहुत ही अनुचित योजना निष्पादित कर रहा है और यह लेता है बहुत समय।
क्यों?
HibernateSessionImpl.createSQLQuery(...)
के सोर्स कोड को देखते हुए मुझे कोड की यह पंक्ति मिली:
SQLQueryImpl query = new SQLQueryImpl(
sql,
this,
factory.getQueryPlanCache().getSQLParameterMetadata( sql )
);
जो कॉल कर रहा है getQueryPlanCache()
कुछ पैरामीटर मेटाडेटा के साथ। मुझे लगता है कि यह मेटाडेटा काफ़ी अच्छा नहीं है ।