Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL InnoDB WYBIERZ...LIMIT 1 DLA AKTUALIZACJI Vs AKTUALIZACJA... LIMIT 1

Ponieważ nie otrzymałem odpowiedzi, zacząłem robić testy porównawcze. Moje kryteria są następujące:

  • 20 000 wstępnie wygenerowanych kodów
  • Korzystanie z Apache ab polecenie z 20 000 żądań, 100 współbieżności:ab -n 20000 -c 100
  • Servlet -> EJB (JPA 2.0 EclipseLink, JTA) do wykonania aktualizacji w DB (tak jak będzie poprzez akcję JSF w rzeczywistej sytuacji)
  • 2 wersje serwletu, jedna z opcją 1 (SELECT ... FOR UPDATE ) i jedna z opcją 2 (UPDATE ... LIMIT 1)
  • Zatrzymano Glassfish, wciśnij testowany Servlet ręcznie 5 razy, aby go rozgrzać, zresetuj wszystko do wartości NULL na user_id
  • Testy są przeprowadzane 3 razy i podana jest średnia

Wyniki:

WYBIERZ... DO AKTUALIZACJI; AKTUALIZACJA... :

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

AKTUALIZACJA.... LIMIT 1:

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

Tak więc przynajmniej w moim systemie opcja z 2 zapytaniami wydaje się bardziej wydajna niż jedno zapytanie. Nie spodziewałem się tego :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1067 - Nieprawidłowa wartość domyślna dla 'bonusid', jak mogę naprawić ten błąd?

  2. Wyciek pamięci w MySQL C++ Connector

  3. C# Sparametryzowane zapytanie MySQL z klauzulą ​​`in`

  4. Ostrzeżenie:mysql_connect():Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:TAK)

  5. MySQL - Perl:Jak uzyskać tablicę kodów pocztowych w ramach przesłanego x mil przesłanego kodu pocztowego w przykładzie Perla?