sql >> Databasteknik >  >> RDS >> Mysql

MySQL InnoDB VÄLJ...LIMIT 1 FÖR UPPDATERING Vs UPPDATERING ... BEGRÄNSNING 1

Eftersom jag inte fick något svar började jag göra benchmarking. Mina kriterier är följande:

  • 20 000 förgenererade koder
  • Användning av Apache ab kommando med 20 000 förfrågningar, 100 samtidighet:ab -n 20000 -c 100
  • Servlet -> EJB (JPA 2.0 EclipseLink, JTA) för att utföra uppdateringen i DB (som det kommer att vara genom en JSF-åtgärd i verklig situation)
  • 2 versioner av Servlet, en med alternativ 1 (VÄLJ ... FÖR UPPDATERING ), och en med alternativ 2 (UPPDATERING ... GRÄNS 1)
  • Stoppade Glassfish, tryck på den testade Servlet manuellt 5 gånger för att värma upp den, återställ allt till NULL till user_id
  • Tester körs 3 gånger vardera och ett genomsnitt anges

Resultat:

VÄLJ ... FÖR UPPDATERING; UPPDATERING ... :

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

UPPDATERING.... GRÄNS 1:

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

Så åtminstone på mitt system verkar alternativet med 2 frågor mer effektivt än en fråga. Det hade jag inte förväntat mig :)




  1. INSERT INTO...SELECT för alla MySQL-kolumner

  2. Daglig databasbackup med Cron Job

  3. Hur kan jag ändra prefix i alla tabeller i min MySQL DB?

  4. SQL-ändringstabell