sql >> Database >  >> RDS >> Mysql

Het instellen van de waarde van één kolom van alle rijen is erg traag

In InnoDB, update verklaringen vergrendelen elke rij die ze scannen. Dit betekent dat om uw 200 rijen bij te werken, het 350 000 vergrendelingen op rijniveau moet creëren, terwijl tegelijkertijd een terugdraaivergrendeling behouden blijft en de vorige waarde wordt verstrekt aan alle transacties die de reeds gewijzigde waarde lezen (aangezien de transactie niet vastgelegd en de wijziging is niet definitief)

MyISAM daarentegen vergrendelt de hele tafel.

Dus als u alle rijen moet bijwerken, vergrendel dan de hele tabel en u krijgt veel betere prestaties (u hebt de vergrendelingen op rijniveau niet nodig)

Maar nog beter, geef een WHERE-clausule op, zoals u deed, en InnoDB verwerft alleen vergrendelingen voor de overeenkomende rijen (evenals enkele gap-locks in de indexstructuur, maar dit valt buiten het bestek van de vraag)



  1. YEAR() Voorbeelden – MySQL

  2. Hoe LOAD_FILE gebruiken om een ​​bestand in een MySQL-blob te laden?

  3. SQL meerdere inserts met Python

  4. SQL Server-indexen - oplopend of aflopend, wat maakt het uit?