Specified key was too long; max key length is 767 bytes

最近在开发中遇到了如上问题,问题显示索引超出了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));

如有不对的地方希望大家多多指正!

参考文献1
参考文献2

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值