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

MySQL InnoDB SELECT ... LIMIT 1 FOR UPDATE Vs UPDATE ... LIMIT 1

Vì tôi không nhận được câu trả lời, tôi bắt đầu làm điểm chuẩn. Tiêu chí của tôi như sau:

  • 20.000 mã được tạo trước
  • Sử dụng Apache ab lệnh với 20.000 yêu cầu, 100 đồng thời:ab -n 20000 -c 100
  • Servlet -> EJB (JPA 2.0 EclipseLink, JTA) để thực hiện cập nhật trong DB (vì nó sẽ thông qua một hành động JSF trong tình huống thực)
  • 2 phiên bản của Servlet, một với tùy chọn 1 (CHỌN ... ĐỂ CẬP NHẬT) và một với tùy chọn 2 (CẬP NHẬT ... LIMIT 1)
  • Đã dừng Glassfish, nhấn Servlet đã thử nghiệm theo cách thủ công 5 lần để làm nóng nó, đặt lại tất cả thành NULL thành user_id
  • Các bài kiểm tra được thực hiện 3 lần mỗi lần và trung bình được cung cấp

Kết quả:

CHỌN ... ĐỂ CẬP NHẬT; CẬP NHẬT ...:

Concurrency Level:      100
Time taken for tests:   758.116 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Row updated:            20000

CẬP NHẬT .... GIỚI HẠN 1:

Concurrency Level:      100
Time taken for tests:   773.659 seconds
Complete requests:      20000
Failed requests:        0
Write errors:           0
Row updated:            20000

Vì vậy, ít nhất trên hệ thống của tôi, tùy chọn có 2 truy vấn có vẻ hiệu quả hơn một truy vấn. Tôi không mong đợi điều đó :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn mySQL để tính tổng số tiền trong các cột (tháng)

  2. bảng cập nhật không gian trống khi người dùng không nhập bất kỳ thứ gì vào hộp văn bản

  3. Khi tôi sử dụng phương thức tạo của Waterline, nó không trả về ID của bản ghi mới

  4. lỗi 1265. Dữ liệu bị cắt ngắn cho cột khi cố gắng tải dữ liệu từ tệp txt

  5. Giá trị mặc định không hợp lệ cho 'Ngày'