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

Dimensione della riga troppo grande (> 8126) posso semplicemente cambiare InnoDB in MyISAM

Sì, puoi passare a MyISAM. Ma non è necessariamente una buona idea:

  • MyISAM non supporta le transazioni
  • Le tabelle MyISAM hanno spesso bisogno di REPAIR dopo un arresto anomalo

Una tabella InnoDB può gestire più di 8 KB per riga. Apparentemente hai riscontrato il problema avendo una dozzina o più colonne TEXT/BLOB? Nella parte principale della riga sono memorizzati al massimo 767 byte di una colonna; il resto viene messo in un blocco separato.

Penso che un ROW_FORMAT metterà tutte le colonne di grandi dimensioni in un blocco separato, lasciando solo 20 byte per indicarlo.

Un altro approccio alle righe larghe è eseguire il "partizionamento verticale". Cioè, costruisci un'altra tabella (o tabelle) con una PRIMARY KEY corrispondente e alcune delle grandi colonne. È particolarmente utile spostare colonne scarsamente popolate in una tabella di questo tipo, quindi avere meno righe in quella tabella e utilizzare LEFT JOIN per recuperare i dati. Inoltre, se disponi di alcune colonne di cui raramente hai bisogno di SELECT , allora quelli sono buoni candidati per trasferirsi -- no JOIN necessario quando non hai bisogno di quelle colonne.