Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकल तालिका की एकाधिक पंक्तियों को अद्यतन करना

यदि प्रत्येक पंक्ति को एक अलग मान मिलना चाहिए जो डेटाबेस में मौजूदा डेटा से प्राप्त नहीं किया जा सकता है, तो समग्र जटिलता को अनुकूलित करने के लिए आप बहुत कुछ नहीं कर सकते हैं। इसलिए बहुत अधिक चमत्कारों की अपेक्षा न करें।

उस ने कहा, आपको तैयार बयानों और बैचिंग का उपयोग शुरू करना चाहिए:

public void updateRank(Map<Integer,Double> map){
    Iterator<Entry<Integer, Double>> it = map.entrySet().iterator();
    String query = "";
    int i = 0;

    Connection connection = getConnection(); // get the DB connection from somewhere
    PreparedStatement stmt = connection.prepareStatement("update profile set rank = ? where profileId = ?");

    while (it.hasNext()) {
        Map.Entry<Integer,Double> pairs = (Map.Entry<Integer,Double>)it.next();
        stmt.setInt(1, pairs.getValue());
        stmt.setDouble(2, pairs.getKey());
        stmt.addBatch(); // this will just collect the data values
        it.remove();
    }       
    stmt.executeBatch(); // this will actually execute the updates all in one
}

यह क्या करता है:

  1. तैयार कथन के कारण SQL पार्सर केवल एक बार SQL को पार्स करता है
  2. बैचिंग क्लाइंट-सर्वर-राउंडट्रिप्स को कम करता है ताकि हर अपडेट के लिए एक न हो
  3. क्लाइंट और सर्वर के बीच संचार कम से कम होता है क्योंकि SQL केवल एक बार प्रसारित होता है और डेटा एकत्र किया जाता है और एक पैकेट (या कम से कम पैकेट) के रूप में भेजा जाता है

इसके अलावा:

  • कृपया जांचें कि क्या डेटाबेस कॉलम profileId एक अनुक्रमणिका का उपयोग कर रहा है ताकि संबंधित पंक्ति को देखना पर्याप्त तेज़ हो
  • आप जांच सकते हैं कि आपका कनेक्शन ऑटो-कमिट पर सेट है या नहीं। यदि ऐसा है तो ऑटो-प्रतिबद्धता को अक्षम करने का प्रयास करें और सभी पंक्तियों के अद्यतन होने के बाद स्पष्ट रूप से लेन-देन करें। इस तरह सिंगल अपडेट ऑपरेशन भी तेज हो सकते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy सत्र और कनेक्शन संबंध

  2. रेल 3.2.6 और डेटाबेस माइग्रेशन के माध्यम से निर्माण को देखता है

  3. PHP MySql का उपयोग करते हुए उन्नत समाचार संग्रह वर्ष/माह

  4. MySql स्वचालित रूप से BETWEEN क्वेरी का अनुकूलन क्यों नहीं करता है?

  5. Oracle क्लाउड प्लेटफ़ॉर्म पर MySQL डेटाबेस सेवा के साथ Oracle JDeveloper का उपयोग करना, भाग 2