2012-04-09 6 views
6

के भीतर getInt के साथ प्रदर्शन समस्या मेरे पास एक परिणाम SetExtractor के अंदर getInt को कॉल करने के साथ एक प्रदर्शन समस्या है। GetInt 20000 बार कहा जाता है। एक कॉल लागत 0.15 एमएस, प्रोफाइलर के अंदर चलते समय कुल लागत 24 सेकंड है। एसक्यूएल कथन के निष्पादन में लगभग 8 सेकंड लगते हैं (प्राथमिक-कुंजी पर पहुंच)। मैं mysql ड्राइवर संस्करण 5.1.13, MySQL सर्वर 5.1.44 और वसंत-जेडीबीसी-3.1.1 का उपयोग करता हूं क्या आप प्रदर्शन को बेहतर बनाने का विचार रखते हैं? methode जो महंगा हो रहा है getIntWithOverflowCheck कहा जाता है getInt के भीतर:ResultSetExtractor

mut.getMutEffect()[0]=(rs.getInt("leffect_a") != 0); 
    mut.getMutEffect()[1]=(rs.getInt("leffect_c") != 0); 
    ... 
    mut.getMutEffect()[19]=(rs.getInt("leffect_y") != 0); 
    mut.getMutReliability()[0]=rs.getInt("lreliability_a"); 
    ... 
    mut.getMutReliability()[19]=rs.getInt("lreliability_y"); 

मेरे योजना इस

CREATE TABLE mutation (
... 
leffect_a BIT NOT NULL, 
lreliability_a TINYINT UNSIGNED NOT NULL, 
... 
leffect_y BIT NOT NULL, 
lreliability_y TINYINT UNSIGNED NOT NULL, 
... 
) ENGINE=MyISAM; 

संपादित की तरह दिखता है। क्या यह चेक चालू करना संभव है?

उत्तर

2

यहाँ कुछ सुझाव हैं:

  • सेट काफ़ी बड़ी संख्या में करने के लिए आकार लाने: Statement.setFetchSize()। परिणामसेट को संसाधित करते समय डेटाबेस सर्वर पर राउंड-ट्रिप को कम करना चाहिए।

  • बयान का चयन सुनिश्चित करें

  • जनरल तालिका अनुकूलन की रूपरेखा, उदा इष्टतम है क्या आप सही डेटाटाइप का उपयोग कर रहे हैं? ऐसा लगता है कि आप leffect_a को BOOLEAN

  • सुनिश्चित करें कि आप अपने SELECT कथन में किसी भी अनावश्यक कॉलम को वापस नहीं कर रहे हैं।

  • उपयोग PreparedStatement

  • बचें स्क्रॉल और updatable resultsets (न तो डिफ़ॉल्ट हैं)

+0

स्टेटमेंट.सेटफेटच आकार() अच्छी तरह से काम किया। बहुत बहुत धन्यवाद। –

0

दो सुझाव:

  1. स्टोर स्थानीय चर में getMutEffect() और getMutReliability() का परिणाम के रूप में वे बार-बार उपयोग किया जाता है। हॉटस्पॉट जिट डुप्लिकेट एक्सप्रेशन को इनलाइन और हटा सकता है लेकिन मुझे लगता है कि इस पर भरोसा करने के लिए यह स्पष्ट नहीं है।
  2. कॉलम नामों के बजाय अपने इंडेक्स का उपयोग करके परिणामसेट के मानों को पुनर्प्राप्त करना तेज़ हो सकता है। आप इंडेक्स में नामों का स्थानीय मानचित्र भी बना सकते हैं, अजीब तरह से कुछ जेडीबीसी ड्राइवरों के लिए यह परिणामसेट मैपिंग करने से तेज़ है।
+0

जवाब के लिए धन्यवाद। प्रोफाइलर दिखाता है कि सूचकांक में कॉलम नाम को मानचित्र करना सस्ता है। और getMutEffect तक पहुंचने पर कोई प्रदर्शन समस्या भी नहीं है। –