sql >> Databasteknik >  >> RDS >> Mysql

Att ställa in värdet för en kolumn av alla rader är mycket långsamt

I InnoDB, update uttalanden låser varje rad de skannar. Detta innebär att för att uppdatera dina 200 rader måste den skapa 350 000 radnivålås, samtidigt som ett återställningslås behålls och tillhandahålla det tidigare värdet till alla transaktioner som läser det redan ändrade värdet (eftersom transaktionen inte är begått och ändringen är inte slutgiltig)

MyISAM å andra sidan låser hela bordet.

Så om du behöver uppdatera alla rader, lås hela tabellen, så får du en mycket bättre prestanda (du behöver inte låsen på radnivå)

Men ännu bättre, ange en WHERE-klausul, som du gjorde, så kommer InnoDB endast att förvärva lås för de matchande raderna (liksom några gap-lås i indexträdet, men detta faller inte i fråga)



  1. PHP:Dynamisk rullgardinsmeny med optgroup

  2. MySQL:Jämför skillnader mellan två tabeller

  3. Uppdatera ett kolumnvärde till ANTAL rader för specifika värden i samma tabell

  4. SQL Data Type för att lagra byggversioner