sql >> Database >  >> RDS >> Mysql

MySQL InnoDB SELECTEER ... LIMIET 1 VOOR UPDATE Vs UPDATE ... LIMIET 1

Omdat ik geen antwoord kreeg, ben ik begonnen met benchmarken. Mijn criteria zijn als volgt:

  • 20.000 vooraf gegenereerde codes
  • Gebruik van Apache ab commando met 20.000 verzoeken, 100 gelijktijdigheid:ab -n 20000 -c 100
  • Servlet -> EJB (JPA 2.0 EclipseLink, JTA) om de update in DB uit te voeren (zoals in een echte situatie via een JSF-actie)
  • 2 versies van de Servlet, één met optie 1 (SELECT ... FOR UPDATE ), en één met optie 2 (UPDATE ... LIMIT 1)
  • Glasvis gestopt, 5 keer handmatig op de geteste Servlet drukken om hem op te warmen, alles resetten naar NULL naar user_id
  • Tests worden elk 3 keer uitgevoerd en het gemiddelde wordt gegeven

Resultaten:

KIES ... VOOR UPDATE; BIJWERKEN ... :

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

UPDATE....LIMIET 1:

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

Dus op mijn systeem lijkt de optie met 2 query's efficiënter dan de ene query. Dat had ik niet verwacht :)




  1. Waarom kan ik geen triggers maken voor objecten die eigendom zijn van SYS?

  2. postgresql dubbele sleutel schendt unieke beperking

  3. Incrementeel laden in SSIS

  4. SQL Server-prestaties TOP CPU-query -2