Error number: MY-011050; Symbol: ER_INNODB_IDX_CNT_MORE_THAN_DEFINED_IN_MYSQL; SQLSTATE: HY000
Message: InnoDB: Table %s contains %lu indexes inside InnoDB, which is different from the number of indexes %u defined in MySQL.
错误说明
MySQL错误代码MY-011050是一个InnoDB异常错误代码,其完整的报错信息为:Error number: MY-011050;Symbol: ER_INNODB_IDX_CNT_MORE_THAN_DEFINED_IN_MYSQL;SQLSTATE: HY000,错误报错信息表明当指定创建索引的数量超出了MySQL允许定义的最大索引数量,就会出现这个错误。
常见案例
常见情况就是当试图为InnoDB存储引擎提供超过MySQL允许的最大索引数量时,就会抛出MY-011050错误,比如当InnoDB表有多个索引(比如有多个复合索引),在执行ALTER TABLE或者CREATE INDEX等SQL语句时,试图在相同的表中添加新的索引就可能抛出MY-011050错误。
解决方法
MY-011050错误的解决方法可以从两部分的角度来描述:一是增加MySQL允许定义的最大索引数量;另一个是减少当前表中已经定义的索引数量。
第一种解决方法,在MySQL服务器中配置文件中增加innodb_max_index_length配置参数,该参数可以改变MySQL允许定义的最大索引数量,增大定义的索引数量可以避免MY-011050错误的发生,可以将innodb_max_index_length的默认配置值修改为7576,这样子就改变了MySQL允许定义的最大索引数量。
另外一个解决方法就是通过减少当前表中定义的索引数量来解决MY-011050错误,通过DROP INDEX SQL语句来将多余的索引移除掉,避免超出MySQL允许最大索引数量。此外,如果同一个表中某个字段上被定义了多个索引,那么可以通过合并多个索引来解决MY-011050错误,可以把多个索引合并成一个索引,这样就可以有效的减少索引的总数量,从而避免造成MY-011050错误的发生。