Como no obtuve respuesta, comencé a hacer benchmarking. Mis criterios son los siguientes:
- 20 000 códigos generados previamente
- Uso de Apache
ab
comando con 20.000 solicitudes, 100 simultaneidad:ab -n 20000 -c 100
- Servlet -> EJB (JPA 2.0 EclipseLink, JTA) para realizar la actualización en DB (como será a través de una acción JSF en situación real)
- 2 versiones del Servlet, una con la opción 1 (SELECCIONAR... PARA ACTUALIZAR) y otra con la opción 2 (ACTUALIZAR... LÍMITE 1)
- Detuvo Glassfish, golpeó el Servlet probado manualmente 5 veces para calentarlo, restableció todo a NULL a user_id
- Las pruebas se ejecutan 3 veces cada una y se proporciona el promedio
Resultados:
SELECCIONE... PARA ACTUALIZAR; ACTUALIZAR... :
Concurrency Level: 100
Time taken for tests: 758.116 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
ACTUALIZAR.... LÍMITE 1:
Concurrency Level: 100
Time taken for tests: 773.659 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
Entonces, al menos en mi sistema, la opción con 2 consultas parece más eficiente que la única consulta. No me esperaba eso :)