zoukankan      html  css  js  c++  java
  • #1709

    #1709 - Index column size too large. The maximum column size is 767 bytes.是什么原因导致的,如何处理?
    一、原因
    1、对于行格式为REDUNDANT和COMPACT的InnoDB表来说,索引的最大长度为767字节
    2、行格式为DYNAMIC和COMPRESSED格式的InnoDB表最大索引长度允许达到3072字节(注:8.0版本之前,要求innodb_file_format=Barracuda,且innodb_large_prefix=1。 且8.0以后该参数已废弃)
    3、注意,即便设置innodb_large_prefix=1,但若行格式是REDUNDANT和COMPACT时调整无效,且5.7.6版本以前该参数默认是关闭的,5.7.7版本后默认开启。8.0后该参数也已废弃
    4、索引长度计算规则:
      4.1 一般地,key_len等于索引列类型字节长度,例如tinyint类型为1字节,int类型为4字节,bigint为8字节
      4.2 如果是字符串类型,还需要同时考虑字符集因素(latin1为1字节/gbk为2字节/utf8为3字节/utf8mb4为4字节),例如:CHAR(30) UTF8则key_len至少是90字节
      4.3 如果是日期时间型还需要考虑精度值(5.6.4版本以后),如datetime为5字节+精度值,timestamp为4字节+精度值
      4.4 若该列类型定义时允许NULL,还需要再加1字节
      4.5 若该列类型为变长类型,例如 VARCHAR(TEXTBLOB不允许整列创建索引,如果创建部分索引也被视为动态列类型),还需要再加2字节

    二、处理方法
    1、降低索引长度,采用部分索引而不是整列索引,如:create index idx_xx on t(code(30))
    2、修改innodb_file_format为Barracuda,同时修改表的row format为DYNAMIC,使得最大索引长度增加到3072字节,如:alter table t row_format=dynamic

  • 相关阅读:
    英语:漏屋-英语学习的真实方法及误区分析(转)
    TSP(旅行者问题)——动态规划详解(转)
    用二进制位表示状态,从而将状态压缩到一个整数里表示
    Android的CursorLoader用法小结
    RMQ问题ST算法 (还需要进一步完善)
    离散化
    反转(开关问题) POJ 3276
    关于序列中某个元素位置的查找
    快速幂运算
    Docker学习2-虚拟化
  • 原文地址:https://www.cnblogs.com/DBABlog/p/12926902.html
Copyright © 2011-2022 走看看