Mysql
 sql >> Base de données >  >> RDS >> Mysql

Taille de ligne trop grande (> 8126) puis-je simplement changer InnoDB en MyISAM

Oui, vous pouvez passer à MyISAM. Mais ce n'est pas forcément une bonne idée :

  • MyISAM ne prend pas en charge les transactions
  • Les tables MyISAM ont souvent besoin de REPAIR après un crash

Une table InnoDB peut gérer plus de 8 Ko par ligne. Apparemment, vous avez rencontré le problème en ayant une douzaine ou plus de colonnes TEXT/BLOB ? Au plus 767 octets d'une colonne sont stockés dans la partie principale de la ligne ; le reste est mis dans un bloc séparé.

Je pense qu'un ROW_FORMAT placera toutes les grandes colonnes dans un bloc séparé, ne laissant que 20 octets pour pointer dessus.

Une autre approche des lignes larges consiste à effectuer un "partitionnement vertical". Autrement dit, créez une autre table (ou des tables) avec une PRIMARY KEY correspondante et certaines des grandes colonnes. Il est particulièrement pratique de déplacer des colonnes peu peuplées vers une telle table, puis d'avoir moins de lignes dans cette table et d'utiliser LEFT JOIN pour récupérer les données. Aussi, si vous avez des colonnes dont vous avez rarement besoin de SELECT , alors ce sont de bons candidats à déplacer -- pas de JOIN nécessaire lorsque vous n'avez pas besoin de ces colonnes.