免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6536 | 回复: 6
打印 上一主题 下一主题

【已解决】InnoDB 单列索引不超过767 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-20 11:57 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2012-09-20 18:51 编辑

MySQL 手册中讲的  "By default, an index key for a single-column index can be up to 767 bytes."  关于InnoDB单列索引的最大只支持767个字节,有谁能详细介绍下为什么吗?

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
2 [报告]
发表于 2012-09-20 12:03 |只看该作者
@cumtyux

        单列索引限制
上面有提到单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.5以后,开始支持4个字节的uutf8。255×4>767, 于是增加了一个参数叫做 innodb_large_prefix。
这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072。

       联合索引3072
我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。
所以一个记录最多不能超过8k。
又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。
由于需要预留和辅助空间,扣掉后不能超过3500,取个“整数”就是(1024*3)。

具体参见丁奇的分享: http://www.mysqlops.com/2012/09/ ... 6%E7%9A%84tips.html

论坛徽章:
0
3 [报告]
发表于 2012-09-20 12:13 |只看该作者
“单列索引限制767,起因是256×3-1”    这个255数字代表什么?能从InnoDB物理存储的角度解释下吗?回复 2# chinafenghao


   

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
4 [报告]
发表于 2012-09-20 13:09 |只看该作者
@cumtyux
一个CHAR字段最长的字符数。

论坛徽章:
0
5 [报告]
发表于 2012-09-20 13:19 |只看该作者
谢谢,那我还想追问下  why? varchar字段建的索引,要限制这个256呢?
chinafenghao 发表于 2012-09-20 13:09
@cumtyux
一个CHAR字段最长的字符数。

论坛徽章:
0
6 [报告]
发表于 2012-09-20 13:27 |只看该作者
貌似只是个硬性规定,也许你可以在源码更改以后编译

论坛徽章:
0
7 [报告]
发表于 2012-09-20 13:37 |只看该作者
阿里的丁奇说:只是因为char最大是255,所以以前的程序员以为一个长度为255的index就够用了,所以设置这个256.历史遗留问题  。  谢谢chinafenghao  ,谢谢大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP