Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Definir o valor de uma coluna de todas as linhas é muito lento


No InnoDB, update instruções bloqueiam todas as linhas que examinam. Isso significa que para atualizar suas 200 linhas, ele precisa criar 350.000 bloqueios em nível de linha, mantendo um bloqueio de reversão ao mesmo tempo e fornecendo o valor anterior para qualquer transação que esteja lendo o valor já alterado (já que a transação não é confirmada e a mudança não é final)

O MyISAM, por outro lado, bloqueia a tabela inteira.

Portanto, se você precisar atualizar todas as linhas, bloqueie a tabela inteira e obterá um desempenho muito melhor (você não precisará dos bloqueios em nível de linha)

Mas ainda melhor, forneça uma cláusula WHERE, como você fez, e o InnoDB adquirirá bloqueios apenas para as linhas correspondentes (assim como alguns bloqueios de lacuna na árvore de índice, mas isso está fora do escopo da questão)