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。
本文解析了MySQL中索引长度限制的原理,包括在不同版本和字符编码下,如utf8和utf8mb4,单列索引从767字节到3072字节的变化过程。详细解释了innodb_page_size、b+tree结构以及聚簇索引对索引长度的影响。
928

被折叠的 条评论
为什么被折叠?



