sql >> Base de Datos >  >> RDS >> Mysql

MySQL InnoDB SELECCIONAR... LÍMITE 1 PARA ACTUALIZAR VS ACTUALIZAR... LÍMITE 1

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