行大小太大(> 8126)我可以将InnoDB更改为MyISAM

时间:2015-04-09 09:36:04

标签: mysql innodb myisam

我有这个错误:

  

行大小太大(> 8126)。将某些列更改为TEXTBLOB或使用ROW_FORMAT=DYNAMICROW_FORMAT=COMPRESSED可能有所帮助。在当前行格式中,内联存储了{6}字节的BLOB前缀。

要解决此问题,我可以将InnoDB更改为MyISAM吗?

1 个答案:

答案 0 :(得分:3)

是的,您可以切换到MyISAM。但这不一定是个好主意:

  • MyISAM不支持交易
  • 崩溃后,MyISAM表通常需要REPAIR

InnoDB表每行可处理8KB以上。显然你有十几个或更多的TEXT / BLOB列遇到了问题?列的最多767个字节存储在行的主要部分中;其余部分放在一个单独的区块中。

我认为一个ROW_FORMAT会将所有大列放在一个单独的块中,只留下20个字节指向它。

广泛行的另一种方法是进行"垂直分区"。也就是说,使用匹配的PRIMARY KEY和一些大列构建另一个表(或多个表)。将稀疏填充的列移动到这样的表,然后在该表中具有较少的行,并使用LEFT JOIN来获取数据是特别方便的。此外,如果您有一些您很少需要SELECT的列,那么这些列很适合移动 - 当您不需要这些列时,不需要JOIN