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

Cập nhật nhiều hàng của bảng đơn

Nếu mỗi hàng phải nhận một giá trị khác mà không thể lấy từ dữ liệu hiện có trong cơ sở dữ liệu, bạn không thể làm gì nhiều để tối ưu hóa độ phức tạp tổng thể. Vì vậy, đừng mong đợi quá nhiều điều kỳ diệu.

Điều đó nói rằng, bạn nên bắt đầu sử dụng các câu lệnh đã chuẩn bị sẵn và theo lô:

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
}

Điều này có tác dụng gì:

  1. câu lệnh đã chuẩn bị sẵn khiến trình phân tích cú pháp SQL chỉ phân tích cú pháp SQL một lần
  2. lô giảm thiểu các vòng quay giữa máy khách-máy chủ để không phải là một cho mỗi bản cập nhật
  3. giao tiếp giữa máy khách và máy chủ bị giảm thiểu vì SQL chỉ được truyền một lần và dữ liệu được thu thập và gửi dưới dạng gói (hoặc ít nhất là ít gói hơn)

Ngoài ra:

  • Vui lòng kiểm tra xem cột cơ sở dữ liệu profileId đang sử dụng một chỉ mục để việc tra cứu hàng tương ứng đủ nhanh
  • Bạn có thể kiểm tra xem kết nối của mình có được đặt thành tự động cam kết hay không. Nếu vậy, hãy thử tắt tính năng tự động cam kết và xác nhận giao dịch một cách rõ ràng sau khi tất cả các hàng được cập nhật. Bằng cách này, các thao tác cập nhật đơn lẻ cũng có thể nhanh hơn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa phân vùng thả mysql và phân vùng cắt ngắn là gì

  2. SQL liệt kê tất cả các sinh nhật trong vòng 14 ngày tới và trước đó

  3. Làm cách nào để trừ số giờ cho ngày giờ trong MySQL?

  4. N hàng đầu trên mỗi nhóm với nhiều bảng tham gia

  5. PHP PDOException:SQLSTATE [HY093]:Số tham số không hợp lệ