当前位置: 首页 > 网络应用技术

MySQL索引太长的专业钥匙太长了问题记录

时间:2023-03-06 12:25:38 网络应用技术

  创建桌子时,我遇到了一个有趣的问题。提示的是,从描述中,密钥太长了,无法超过指定的767字节限制。

  以下是问题的表结构:

  我们可以看到,为了姓名,我们设置了1000个变量字符的长度。因为它使用UTF8MB4编码,所以它的大小变为

  因此,如果不修改其他配置,varchar的长度应为

  有兴趣的学生可以对其进行测试,并指定名称大小为191、192,是否可以成功创建上表,后者的创建表失败。

  解决方案

  my.cnf配置

  以上3072字节的原因如下

  我们知道InnoDB页面的默认大小为16K。由于它是一个Btree组织,叶节点上的页面必须至少包含两个记录(否则链接列表将降级)。

  因此记录不能超过8k。由于InnoDB的群集索引结构的b,第二级索引包含主键索引,因此每个单个索引不能超过4K(极端情况,PK,PK和某个第二级索引已达到此限制)。

  由于需要保留空间和辅助空间,因此扣除后不能超过3500。取一个“整数”(1024*3)。

  解决方案2

  创建表时,添加

  该参数的作用如下:

  MySQL索引仅支持767个字节,每个字符UTF8MB4占4个字节,因此索引的最大长度只能是191个字符,即Varchar(191)。如果要使用较大的字段,则需要设置MySQL以支持支持DATA压缩,并修改表属性row_format = {dynamic |压缩}

  资料来源:一个灰色博客