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

Ustawienie wartości jednej kolumny wszystkich wierszy jest bardzo powolne

W InnoDB, update wyciągi blokują każdy skanowany wiersz. Oznacza to, że aby zaktualizować 200 wierszy, musi utworzyć 350 000 blokad na poziomie wiersza, zachowując jednocześnie blokadę wycofania i podając poprzednią wartość wszelkim transakcjom, które odczytują już zmienioną wartość (ponieważ transakcja nie jest popełnione, a zmiana nie jest ostateczna)

MyISAM z drugiej strony blokuje cały stół.

Więc jeśli chcesz zaktualizować wszystkie wiersze, zablokuj całą tabelę, a uzyskasz znacznie lepszą wydajność (nie będziesz potrzebować blokad na poziomie wiersza)

Ale jeszcze lepiej, podaj klauzulę WHERE, tak jak to zrobiłeś, a InnoDB uzyska blokady tylko dla pasujących wierszy (jak również niektórych luk w drzewie indeksów, ale to nie wchodzi w zakres pytania)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyszukiwanie w pobliżu w Mapach Google, PHP i MySQL

  2. MySQL - Jak zwiększyć rozmiar varchar istniejącej kolumny w bazie danych bez psucia istniejących danych?

  3. połączenie Pythona 2.6.1 z MySQLdb

  4. Język zapytań Neo4j - Cypher

  5. Java - Pobieranie danych z bazy danych MySQL