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

Việc đặt giá trị của một cột trong tất cả các hàng rất chậm

Trong InnoDB, update các câu lệnh khóa mọi hàng mà chúng quét. Điều này có nghĩa là để cập nhật 200 hàng của bạn, nó phải tạo 350 000 khóa cấp hàng, đồng thời giữ khóa khôi phục và cung cấp giá trị trước đó cho bất kỳ giao dịch nào đang đọc giá trị đã thay đổi (vì giao dịch không cam kết và thay đổi không phải là cuối cùng)

Mặt khác, MyISAM khóa toàn bộ bảng.

Vì vậy, nếu bạn cần cập nhật tất cả các hàng, hãy khóa toàn bộ bảng và bạn sẽ nhận được hiệu suất tốt hơn nhiều (bạn sẽ không cần khóa ở cấp độ hàng)

Nhưng tốt hơn nữa, hãy cung cấp mệnh đề WHERE, giống như bạn đã làm và InnoDB sẽ chỉ nhận được các khóa cho các hàng phù hợp (cũng như một số khóa khoảng trống trong cây chỉ mục, nhưng điều này nằm ngoài phạm vi của câu hỏ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. Chèn dữ liệu vào bảng với kết quả từ một truy vấn chọn lọc khác

  2. Mysql cải thiện tốc độ CHỌN

  3. Django có làm hỏng DateTimeField nhận biết múi giờ khi lưu nó vào Cơ sở dữ liệu không?

  4. Phần mở rộng PDO của PHP7 có đọc toàn bộ kết quả được đặt vào bộ nhớ không?

  5. Yii2 - tham gia trái với nhiều điều kiện