767来源:
MySQL5.5之前,各种字符编码中utf8(3字节)是占用空间最大的字节,
所以限制了单列索引限制256*3-1 = 767。
5.5之后引入了utf8mb4编码占用4字节,增加innodb_large_prefix参数,当置为ON时允许列索引最大达到3072。
3072来源:
innodb的page默认大小为16k
由于采用b+tree结构,为了不退化为链表,要求子节点一个page最好包含两条记录,所以一个记录不能超过8k。
又由于聚簇索引,在二级索引中包含主键索引,所以单个索引不能超过4k,去除预留和辅助空间,取值3072。