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

Tamanho da linha muito grande (> 8126) posso apenas alterar o InnoDB para MyISAM


Sim, você pode mudar para MyISAM. Mas isso não é necessariamente uma boa ideia:
  • MyISAM não suporta transações
  • As tabelas MyISAM geralmente precisam de REPAIR após uma falha

Uma tabela InnoDB pode lidar com mais de 8 KB por linha. Aparentemente, você encontrou o problema por ter uma dúzia ou mais de colunas TEXT/BLOB? No máximo 767 bytes de uma coluna são armazenados na parte principal da linha; o resto é colocado em um bloco separado.

Acho que um ROW_FORMAT colocará todas as colunas grandes em um bloco separado, deixando apenas 20 bytes para apontar para ele.

Outra abordagem para linhas largas é fazer "particionamento vertical". Ou seja, construa outra tabela (ou tabelas) com uma PRIMARY KEY correspondente e algumas das grandes colunas. É especialmente útil mover coluna(s) esparsamente preenchida(s) para tal tabela, então ter menos linhas nessa tabela e usar LEFT JOIN para buscar os dados. Além disso, se você tiver alguma(s) coluna(s) que raramente precisa SELECT , então esses são bons candidatos para mover -- sem JOIN necessário quando você não precisa dessas colunas.