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

MySQL:Tại sao DELETE lại tốn nhiều CPU hơn INSERT?

Ít nhất với InnoDB (và tôi hy vọng họ có bạn về điều này), bạn có nhiều thao tác hơn ngay cả khi không có khóa ngoại . Một phụ trang gần như thế này:

  1. Chèn hàng
  2. Đánh dấu trong bộ đệm nhật ký nhị phân
  3. Đánh dấu cam kết

Việc xóa thực hiện như sau:

  1. Đánh dấu hàng đã bị xóa (lấy cùng một lần truy cập như một lần chèn - trang được viết lại)
  2. Đánh dấu trong bộ đệm nhật ký nhị phân
  3. Đánh dấu là đã cam kết
  4. Trên thực tế, hãy xóa hàng, (lấy cùng một lần truy cập như một lần chèn - trang được viết lại)
  5. Xóa chuỗi theo dõi cũng như xóa trong bộ đệm nhật ký nhị phân.

Vì vậy, bạn có hai lần phải xóa thay vì chèn. Việc xóa yêu cầu hai lần ghi đó vì nó phải được đánh dấu là đã xóa đối với tất cả các phiên bản về sau, nhưng chỉ có thể bị xóa khi không còn giao dịch nào nhìn thấy nó. Vì InnoDB chỉ ghi các khối đầy đủ vào đĩa, hình phạt sửa đổi cho một khối là không đổi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hình ảnh hiển thị PHP BLOB từ MySQL

  2. mysqli_real_escape_string và vấn đề dấu ngoặc kép

  3. Cách xóa bản sao với điều kiện nhất định

  4. Khi nào tôi nên sử dụng UNSIGNED và SIGNED INT trong MySQL?

  5. MySQL LOAD_FILE trả về NULL