SQL5.7版本索引超长
本次使用库为Mysql库,版本为:5.7.34,编码集为UTF8,存储引擎为innodb
问题概述:
从云上导入SQL文件后,导入库发生异常索引超长,感觉很奇怪,线上确实是有字段长度为255的字段联合组成唯一索引,但是线上同版本的库却正常建立了表
百度的结果是
在MySQL5.5版本,引入了innodb_large_prefix,用来禁用大型前缀索引,以便与不支持大索引键前缀的早期版本的InnoDB兼容
开启innodb_large_prefix可以使单索引的长度限制达到3072字节(但是联合索引总长度限制还是3072字节),禁用时单索引的长度限制为767字节
在MySQL5.5版本与MySQL5.6版本,innodb_large_prefix是默认关闭的,在MySQL5.7及以上版本则默认开启
查配置文件后确实没有innodb_large_prefix项的配置,版本是5.7.34,那该项应该是自动开启
既然不是该项,应该是别的参数导致了限制了大小
解决:
innodb_page_size = 8K -------------->innodb_page_size = 16K
innodb_page_size
该参数是先将需要写入的数据写到内中,再从内存写到磁盘,这个参数就是控制这块内存的大小
如果内存是16K那就是一次内存IO光是虚拟地址到物理地址的转换就要去内存查4次页表,再算上真正的内存访问,需要5次内存IO才能获取一个内存数据。
建议从源头上,也就是字段的长度通过合理的值设置避免出现该异常
innodb_page_size参数的具体理解请看:
MySQL innodb_page_size
大神讲的很清楚