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

L'impostazione del valore di una colonna di tutte le righe è molto lenta

In InnoDB, update le istruzioni bloccano ogni riga che scansionano. Ciò significa che per aggiornare le tue 200 righe, deve creare 350.000 blocchi a livello di riga, mantenendo allo stesso tempo un blocco di rollback e fornendo il valore precedente a tutte le transazioni che stanno leggendo il valore già modificato (poiché la transazione non è commesso e la modifica non è definitiva)

MyISAM invece blocca l'intero tavolo.

Quindi, se devi aggiornare tutte le righe, blocca l'intera tabella e otterrai prestazioni di gran lunga migliori (non avrai bisogno dei blocchi a livello di riga)

Ma ancora meglio, fornisci una clausola WHERE, come hai fatto tu, e InnoDB acquisirà i lock solo per le righe corrispondenti (così come alcuni gap-lock nell'albero degli indici, ma questo è fuori dallo scopo della domanda)