在某个网站上,忽然看到了个简短的问答“在MySQL数据库单个普通表上,最多可以创建多少个索引?”
老实说,看到这个问题的瞬间我是有点懵的状态,我原本只只知道Innodb引擎的表,最多只有1017列(至于为什么不是1024,可以百度一下),
下意识地就觉得索引最多可以创建1017个,但是仔细一想,不对啊, 索引可以是复合索引啊,那绝对不止1017,难道索引的数量会是1个很大的数据吗?
再仔细想想,以Innodb的抠门个性,不可能会是1个大的数值,然后去翻了下官方文档,看到如下内容。
15.22 InnoDB Limits
This section describes limits for InnoDB
tables, indexes, tablespaces, and other aspects of the InnoDB
storage engine.
A table can contain a maximum of 1017 columns. Virtual generated columns are included in this limit.
A table can contain a maximum of 64 secondary indexes
上面就清楚地写着, 1个表最大只能创建64个2级索引。 加上主键,那么上面的问题就有了答案,65个。
我试着填了65 的答案上去之后,点击提交,网站给我的回复是错误,我花了1个积分查看了正确答案【我回答是为了赚积分,没想到还赔了1个积分!!】
网站给的答案是:16.
纳尼! 怎么比官方的64还低!
然后我往刚才官方文档下面拉一拉,发现看了一个跟16的数字有关的描述:
A maximum of 16 columns is permitted for multicolumn indexes. Exceeding the limit returns an error.
ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
上面写的是,复合索引最多只能16列,超过就会报错。
有意思的是,然后我又在百度上搜索了相关的问题,没想到好几个答案都是写着16,我觉得16的应该是被别人给误导了,这个网站出题的这个作者,应该
也是百度了下,看到答案是16就给了个16的答案。 有心反馈这个问题,可惜没有渠道反馈,然后就在这里写下一点心得,关于技术的东西,发现有疑问或者怀疑的时候,
还是得翻一翻官方文档为好,起码能保证不会出错。