最近在开发中遇到了如上问题,问题显示索引超出了767长度限制,出现这个原因是因为数据库中innodb_large_prefix变量被关闭了,打开情况下索引键前缀限制为3072字节。
解决办法:
本着不修改数据库配置得原则:我们可以添加索引前缀来解决这个问题,不必把整个字段都当成索引。
索引前缀的长度选择:
select count(distinct left(字段名
,num))/count(*) from 表名;
这里num是指截取的长度,这个结果比例越大越好。
1;首先删除原先的索引,因为索引长度不一样系统会认为是两个索引
例如:drop index 索引名 on 表名;
2:找到合适的索引前缀长度
例如:select count(distinct left(字段名
,num))/count(*) from 表名;
3:设置索引前缀
例如:alter table 表名 add index 索引名(字段名(num));
如有不对的地方希望大家多多指正!