sql >> Database teknologi >  >> RDS >> Mysql

Indstilling af værdien af ​​en kolonne af alle rækker er meget langsom

I InnoDB, update udsagn låser hver række, de scanner. Dette betyder, at for at opdatere dine 200 rækker, skal den oprette 350.000 række-niveaulåse, mens den bibeholder en rollback-lås på samme tid og giver den tidligere værdi til alle transaktioner, der læser den allerede ændrede værdi (da transaktionen ikke er forpligtet, og ændringen er ikke endelig)

MyISAM på den anden side låser hele bordet.

Så hvis du har brug for at opdatere alle rækkerne, skal du låse hele tabellen, og du vil få en langt bedre ydeevne (du behøver ikke låse på rækkeniveau)

Men endnu bedre, angiv en WHERE-klausul, som du gjorde, og InnoDB vil kun erhverve låse for de matchende rækker (samt nogle gap-locks i indekstræet, men dette er uden for spørgsmålets omfang)



  1. Introduktion til automatisk skalering af Amazon Web Services (AWS).

  2. Læsning af afkrydsningsfeltværdier ved hjælp af imploderingsfunktion

  3. Hvad er forskellen mellem Non-Repeatable Read og Phantom Read?

  4. Spor signaler med en signalbehandlingsdatamodel