Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara tercepat untuk memperbarui sejumlah besar baris dengan input param List di MyBatis ke Oracle db

Menggunakan eksekutor batch adalah cara yang disarankan, tetapi Anda harus melakukannya dengan benar.
Dua masalah yang saya perhatikan.

  1. Menyetel ukuran batch yang tepat adalah penting. jawaban tertaut mengirimkan semua data pada akhirnya yang sangat tidak efisien.
  2. Menggunakan ${} ke parameter referensi membuat setiap pernyataan unik dan mencegah pengemudi menggunakan kembali pernyataan tersebut (pada dasarnya manfaat dari pelaksana batch hilang). Lihat FAQ ini untuk perbedaan antara #{} dan ${} .

Berikut ini adalah operasi batch yang umum menggunakan MyBatis.
Sebagai batchSize terbaik tergantung pada berbagai faktor, Anda harus mengukur kinerja menggunakan data aktual.

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();
}

Dan ini adalah versi pernyataan pembaruan yang efisien.

<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. Pekerjaan Stats Pengoptimal 11g Saya Berhenti Pada Saya – Diperbaiki

  2. Mendapatkan output dalam file datar menggunakan Oracle di UNIX

  3. cara menonaktifkan koneksi simultan oleh satu pengguna di oracle

  4. Sql*plus selalu mengembalikan kode keluar 0?

  5. Bagaimana cara memasukkan BLOB ke Oracle dengan Python?