Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách nhanh nhất để cập nhật số lượng lớn các hàng với đầu vào Danh sách tham số trong MyBatis lên Oracle db

Sử dụng trình thực thi hàng loạt là cách được khuyến nghị, nhưng bạn cần thực hiện đúng cách.
Hai vấn đề mà tôi nhận thấy.

  1. Đặt kích thước lô thích hợp là rất quan trọng. câu trả lời được liên kết gửi tất cả dữ liệu vào cuối mà không hiệu quả lắm.
  2. Sử dụng ${} tham số tham chiếu làm cho mỗi câu lệnh trở thành duy nhất và ngăn trình điều khiển sử dụng lại câu lệnh (về cơ bản, lợi ích của trình thực thi hàng loạt bị mất). Xem Câu hỏi thường gặp này để biết sự khác biệt giữa #{}${} .

Đây là hoạt động hàng loạt điển hình sử dụng MyBatis.
batchSize tốt nhất phụ thuộc vào các yếu tố khác nhau, bạn nên đo lường hiệu suất bằng cách sử dụng dữ liệu thực tế.

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

Và đây là phiên bản hiệu quả của tuyên bố cập nhật.

<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. Kết nối Oracle với SQL Server qua một kết nối an toàn

  2. Tôi nên chỉnh sửa truy vấn như thế nào để cải thiện hiệu suất trong khi vẫn giữ cấu trúc hiện có?

  3. Sự khác biệt giữa oracle DATE và TIMESTAMP

  4. Xóa thẻ trống khỏi xmltype oracle

  5. SQL để trả về số ngày làm việc giữa 2 ngày đã qua