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

Di chuyển bảng chuỗi MyISAM hàng loạt mùa xuân sang InnoDB

Tôi xác nhận rằng việc chỉ thay đổi bảng trình tự MyISAM thành InnoDB khiến các khóa cập nhật được tạo trên các bảng trình tự sau khi update...set...=last_insert_id() tuyên bố nhưng trước khi giao dịch đã được cam kết. Các khóa này không được tạo khi sử dụng chuỗi MyISAM. Vì vậy, cách tiếp cận "dễ dàng" có thể có tác động tiêu cực đến hiệu suất.

Đây là những gì tôi nghĩ ra. Không chắc rằng đây là cách dễ nhất, nhưng nó đang hoạt động.

  1. Per điều này trả lời, thả các bảng trình tự hiện có và xác định lại chúng bằng một cột duy nhất uid BIGINT(20) UNSIGNED NOT NULL PRIMARY KEY auto_increment
  2. Tạo một thủ tục được lưu trữ:a) lấy tên chuỗi làm đối số, b) chèn vào chuỗi và c) trả về LAST_INSERT_ID ()
  3. Viết một lớp java mở rộng MySQLMaxValueIncrementer và gọi thủ tục được lưu trữ trong getNextKey() phương pháp. Tôi đang sử dụng SimpleJdbcCall ví dụ để làm điều này.
  4. Viết một lớp java triển khai DataFieldMaxValueIncrementerFactory và trả về một phiên bản từ bước # 3 từ getIncrementer() phương pháp
  5. Trong cấu hình lô, cập nhật org.springframework.batch.core.repository.support.JobRepositoryFactoryBean cấu hình để sử dụng nhà máy sản xuất bộ tăng từ bước # 4



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL chèn nhiều bản ghi với vòng lặp while

  2. Kiểm tra xem tên người dùng đã tồn tại trong cơ sở dữ liệu MySQL PHP chưa

  3. Cách xếp hạng một bản ghi có cùng trọng số trong MySQL

  4. Kết nối từ xa với MySQL trên Google Compute Engine VM

  5. Linq to SQL bằng cách sử dụng nhóm Theo, và sắp xếp theo số lượng