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

MyBatis में Oracle db . में इनपुट परम सूची के साथ बड़ी संख्या में पंक्तियों को अपडेट करने का सबसे तेज़ तरीका

बैच निष्पादक का उपयोग करना अनुशंसित तरीका है, लेकिन आपको इसे ठीक से करने की आवश्यकता है।
दो मुद्दे जिन पर मैंने ध्यान दिया।

  1. उचित बैच आकार निर्धारित करना महत्वपूर्ण है। लिंक किया गया उत्तर अंत में सभी डेटा भेजता है जो बहुत अधिक कुशल नहीं है।
  2. ${} का उपयोग करना संदर्भ मापदंडों के लिए प्रत्येक कथन अद्वितीय बनाता है और ड्राइवर को कथन का पुन:उपयोग करने से रोकता है (मूल रूप से बैच निष्पादक का लाभ खो जाता है)। देखें यह अक्सर पूछे जाने वाले प्रश्न ए> #{} . के बीच अंतर के लिए और ${}

यहाँ MyBatis का उपयोग करते हुए एक विशिष्ट बैच ऑपरेशन दिया गया है।
सर्वश्रेष्ठ batchSize के रूप में विभिन्न कारकों पर निर्भर करता है, आपको वास्तविक डेटा का उपयोग करके प्रदर्शन को मापना चाहिए।

int batchSize = 1000;
try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
  YourMapper mapper = sqlSession.getMapper(YourMapper.class);
  int size = list.size();
  for (int i = 0; i < size;) {
    mapper.update(list.get(i));
    i++;
    if (i % batchSize == 0 || i == size) {
      sqlSession.flushStatements();
      sqlSession.clearCache();
    }
  }
  sqlSession.commit();
}

और यहाँ अद्यतन विवरण का एक कुशल संस्करण है।

<update id="update">
  UPDATE <include refid="tableName" />
  SET
    item_price = #{item.price},
    update_time = #{item.updateTime}
  WHERE id = #{item.id}
</update>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक्ज़ीक्यूटमैनी () का उपयोग करके फ़ाइल से Oracle तालिका में डेटा लोड करने में असमर्थ

  2. मैं Oracle में किसी अन्य डेटाबेस से चयन के रूप में तालिका कैसे बना सकता हूं?

  3. Oracle 11g डेटा बेस समस्या के साथ django को कॉन्फ़िगर करें

  4. तालिका चर केवल एक मान से भरा है

  5. डेवलपर्स के लिए प्रश्नोत्तर फोरम में शामिल हों