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 đó :)